gpt4 book ai didi

spring - 在不创建 Web 套接字消息代理 Spring 4 的情况下使用 SimpMessagingTemplate

转载 作者:行者123 更新时间:2023-12-04 10:20:42 31 4
gpt4 key购买 nike

我可以使用 SimpMessagingTemplate#convertAndSendToUser 向消息代理发送消息吗?或 SimpMessagingTemplate#convertAndSend不使用 @EnableWebSocketMessageBroker 设置 websocket 消息代理的方法?

我想要做的是利用一个 websocket 服务器为两个应用程序服务器实例(一个 spring 4 和一个 Spring 3)提供消息传递。我创建了一个启用了 Spring 4、Spring boot 和 websocket 消息代理的 Web 服务器。

现在我想要两个应用程序服务器将消息推送到rabbitmq,以便它将它们广播给订阅它的客户端。

我面临的第一个问题是,如果没有可用的 websockt 消息代理配置,SimpMessagingTemplate不会自动连接到应用程序上下文。如果不创建 websocket 留言板,我也无法将其注入(inject)。

请帮我看看这是否可能。

顺便说一句,我有一个 previous question与此相关的未答复。

最佳答案

好吧,在阅读了大量文档后,我自己找到了答案。关键是这种架构正在遵循。

enter image description here

在这个架构中,spring 充当消息代理和客户端之间通信的网关。 Spring 不做任何事情(除了必要时),而是将请求转发给消息代理(STOMP 消息)。 Spring 上保留的配置定义了一些重要的事情。一个是交换,另一个是路由键。 Spring 配置为我们提供了一个抽象层,因此我们可以毫不费力地订阅并将消息推送到消息代理。

SimpMessagingTemplate 是我们用来与消息代理通信的抽象层。 Spring 使用给定的详细信息创建 bean。好吧,我无法手动创建 SimpMessagingTemplate 的实例。我必须将 Spring 3 应用程序更新到 Spring 4 才能使用 websockets。

由于 Spring 和消息代理是分离的,集群应用程序实例不会对消息代理产生任何影响。只有在需要订阅 channel 或需要向 channel 发布消息时,Spring 才会与消息代理进行通信。因此,如果有两个实例订阅了同一个 channel ,那么这将是两个队列使用相同的路由键绑定(bind)一个交换。发布到 channel 的消息将可供所有订阅者(队列)使用,因为它们都使用相同的路由 key 。引用 rabbitmq stop plugin documentation以获得更详尽的描述。

关于spring - 在不创建 Web 套接字消息代理 Spring 4 的情况下使用 SimpMessagingTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792012/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com