不创建Web Socket消息代理,使用SimpMessagingTemplate Spring 4

8
我可以使用 SimpMessagingTemplate#convertAndSendToUserSimpMessagingTemplate#convertAndSend 方法发送消息到消息代理,而不需要使用 @EnableWebSocketMessageBroker 设置一个websocket消息代理吗?
我的目的是利用一个websocket服务器为两个应用程序服务器实例(一个Spring 4和一个Spring 3)提供消息服务。我创建了一个启用了websocket消息代理的Spring 4、Spring Boot和Web服务器。
现在,我想让两个应用程序服务器将消息推送到rabbitmq,以便将它们广播给订阅它的客户端。
我面临的第一个问题是,如果没有可用的websocket消息代理配置,SimpMessagingTemplate 将无法自动装配到应用程序上下文中。我无法在创建websocket消息板之前注入它。
请帮助我找出是否可能实现这一点。
顺便说一下,我有一个未回答的相关问题

我认为如果要向像rabbitmq这样的代理发送消息,您不应该使用SimpMessagingTemplate,而应该使用RabbitTemplate - Luiz E.
是的,那应该是通用情况。我们应该能够直接推送到rabbitmq队列中。在Spring websocket中,这部分已经被隐藏了。无法弄清楚队列名称等信息。当消息代理被配置后,它提供了SimpMessagingTemplate类的一个bean和两个将消息推送到消息代理的方法。 - Susitha Ravinda Senarath
1个回答

1

好的,阅读了大量文档后,我自己找到了答案。关键是这个架构遵循以下原则。

enter image description here

在这种架构中,Spring充当消息代理和客户端之间通信的网关。Spring除了在必要时将请求转发到消息代理(STOMP消息)外,不会做任何事情。Spring的配置定义了几个重要的内容,一个是交换机,另一个是路由键。Spring配置为我们提供了一个抽象层,因此我们可以轻松地订阅和推送消息到消息代理。
SimpMessagingTemplate是我们用来与消息代理通信的抽象层。Spring使用给定的详细信息创建Bean。我无法手动创建SimpMessagingTemplate实例。我必须将Spring 3应用程序更新到Spring 4才能使用WebSockets。
由于Spring和消息代理是解耦的,因此对应用程序实例进行集群化不会对消息代理产生任何影响。只有当Spring需要订阅频道或发布消息到频道时,它才会与消息代理通信。因此,如果有两个实例订阅同一频道,那么将会有两个队列使用相同的路由键绑定一个交换机。发布到频道的消息将对所有订阅者(队列)可用,因为它们都使用相同的路由键。有关更详细的描述,请参阅rabbitmq stop plugin documentation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接