首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring + /topic + SockJS中SimpleMessageBroker的SimpleMessageBroker和SockJS的区别

Spring + /topic + SockJS中SimpleMessageBroker的SimpleMessageBroker和SockJS的区别
EN

Stack Overflow用户
提问于 2016-06-16 08:27:52
回答 3查看 17.6K关注 0票数 17

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

我想从某种程度上理解这种转变背后的逻辑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-16 15:05:05

你应该看看参考文件的这一部分。简而言之,"/topic""/queue"都是配置到同一个目的地的前缀。

在文档中,"/app"是配置好的“应用程序目的地前缀”--意思是所有通过"clientInboundChannel"流入并匹配这些前缀的消息都将映射到您的应用程序,例如使用@MessageMapping注释。

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

因此,从Spring的角度来看,"/queue""/topic"被以同样的方式对待,并且是“典型的”STOMP目的地--所有匹配它们的消息都被转发到messages。现在,如果您使用的是完整的message实现,那么这些目的地可能没有相同的含义,而且message的行为可能会有所不同。下面是使用阿波罗RabbitMQ的一些示例。

注意,如果您愿意,可以更改这些前缀。但我建议你保留这些默认值,除非你真的知道你在做什么。

票数 16
EN

Stack Overflow用户

发布于 2020-04-27 09:28:06

有一个更大和更重要的差异,没有在上面提到的答案。

主题是自动删除,而队列是持久的。这意味着当websocket连接关闭时,主题及其数据将被删除。在队列中,服务器仍然可以发送消息,当客户端通过websocket连接时,它通过服务器接收旧的发送消息。

顺便说一句,内存代理没有什么区别。在使用专用代理时会发生这种情况。

票数 7
EN

Stack Overflow用户

发布于 2018-05-08 18:11:39

我认为最好的答案是Spring中的以下内容

目的地的含义有意在STOMP规范中不透明。可以是任何字符串,完全由STOMP服务器来定义它们支持的目的地的语义和语法。--但是,目的地通常是路径式字符串,其中“/topic/.”意味着发布-订阅(一对多)和"/queue/“意味着点对点(一对一)的消息交换。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37853810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档