当前位置: 首页 > 知识库问答 >
问题:

spring Websocket+SockJS中SimpleMessageBroker的/topic、/queue的区别

陆建木
2023-03-14

如果我使用的是“简单代理”,那么对于spring的Websocket+SockJS,/topic、/queue等之间有什么区别呢?例如。这里在spring Websocket上向特定用户发送消息说:当您客户端订阅以/user/开头的通道时,例如:/user/queue/reply,您的服务器实例将订阅一个名为queue/reply-user的队列[session id]

我想以某种清晰的方式理解这种转换背后的逻辑。

共有2个答案

毛淳
2023-03-14

我认为对这个话题最好的答案是下面的spring文件

目的地的含义在STOMP规范中故意保持不透明。它可以是任何字符串,完全由STOMP服务器来定义它们所支持的目的地的语义和语法。然而,目标是类似路径的字符串,其中“/topic/..”非常常见。暗示发布-订阅(一对多),“/queue/”暗示点对点(一对一)消息交换。

贲骏喆
2023-03-14

您应该看一下参考文档的这一部分。简而言之,“/topic”“/queue”都是配置到相同目的地的前缀。

在文档中,“/app”是配置的“application destination Prefix”-意味着通过“ClientInboundChannel”流入并与这些前缀匹配的所有消息都将映射到您的应用程序,例如使用@MessageMapping注释。

这里,“/topic”“/queue”都是配置为STOMP目的地的前缀-这意味着所有通过“ClientInboundChannel”流入并匹配这些前缀的消息都将转发给STOMP代理。在您的例子中,这就是简单的代理实现。

因此,从spring WebSocket的角度来看,“/queue”“/topic”的处理方式是相同的,并且是“典型的”STOMP目的地--所有与之匹配的消息都被转发到messages Broker。现在,如果您使用的是完整的message broker实现,那么这些目标的含义可能不同,并且message broker行为可能不同。下面是Apache Apollo和RabbitMQ的一些示例。

注意,如果你愿意,你可以更改那些前缀。但我建议你,除非你真的知道你在做什么,否则就把它们当作默认值。

 类似资料:
  • TopicQueue是为了保证Queue中Message的局部有序性(同一Topic内有序)而引入的概念。 用户在创建Queue时,将Queue的topicQueue属性设置为True,得到的Queue即是TopicQueue。 之后,向TopicQueue中发送Message时,用户可以为Message设置String类型的Topic属性(也可以不指定,即Topic为空)。 EMQ将保证用户接收

  • 我正在尝试使用Springframework SimpMessageTemplate(默认Stomp实现)来流式传输时间序列数据,以将消息广播到SockJS客户端订阅的主题。但是,这些消息是按顺序接收的。服务器是单线程的,消息按时间戳升序发送。客户端以某种方式接收到了顺序错误的消息。 我使用的是stompjs和springframework的最新版本(4.1.6版本)。

  • 一、STOMP协议介绍 STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。 STOMP协议的前身是TTMP协

  • 本文向大家介绍详解Springboot整合ActiveMQ(Queue和Topic两种模式),包括了详解Springboot整合ActiveMQ(Queue和Topic两种模式)的使用技巧和注意事项,需要的朋友参考一下 写在前面: 从2018年底开始学习SpringBoot,也用SpringBoot写过一些项目。这里对学习Springboot的一些知识总结记录一下。如果你也在学习SpringBoo

  • SockJS 是一个浏览器上运行的 JavaScript 库,如果浏览器不支持 WebSocket,该库可以模拟对 WebSocket 的支持,实现浏览器和 Web 服务器之间低延迟、全双工、跨域的通讯通道。 SockJS family: SockJS-client JavaScript client library SockJS-node Node.js server SockJS-erlang

  • 本文向大家介绍在 Queue 中 poll()和 remove()有什么区别?相关面试题,主要包含被问及在 Queue 中 poll()和 remove()有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 相同点:都是返回第一个元素,并在队列中删除返回的对象。 不同点:如果没有元素 remove()会直接抛出NoSuchElementException 异常,而 poll()会返回 null