【问题标题】:Use SimpMessagingTemplate without creating a web socket message broker Spring 4在不创建 Web 套接字消息代理 Spring 4 的情况下使用 SimpMessagingTemplate
【发布时间】:2016-06-17 22:47:49
【问题描述】:

我可以使用SimpMessagingTemplate#convertAndSendToUserSimpMessagingTemplate#convertAndSend 方法向消息代理发送消息,而无需使用@EnableWebSocketMessageBroker 设置websocket 消息代理吗?

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

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

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

请帮我看看这是否可行。

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

【问题讨论】:

  • 我认为要向rabbitmq这样的代理发送消息,你不应该使用SimpMessagingTemplate,而应该使用RabbitTemplate
  • 是的,这应该是一般情况。我们应该可以直接推送到rabbitmq队列。在 Spring websocket 中,该部分已隐藏在某个地方。无法弄清楚队列名称是什么等。配置消息代理时,它提供SimpMessagingTemplate 类的 bean 和两种方法将消息推送到消息代理。

标签: spring spring-mvc spring-websocket spring-4


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2010-11-22
    • 2017-12-28
    • 2021-08-18
    相关资源
    最近更新 更多