【发布时间】:2016-06-10 08:52:50
【问题描述】:
我们目前正在使用 Spring 的 SimpMessagingTemplate 将 WebSocket 消息从服务器发送到客户端。我们注意到有时会乱序接收消息。
例子:
(Autowired) SimpMessagingTemplate broker
broker.convertAndSend(channelId, "Test1");
broker.convertAndSend(channelId, "Test2");
Client receives:
"Test2"
"Test1"
由于 WebSocket 是建立在 TCP/IP 之上的,guarantees order,我不明白为什么 Spring/SimpMessagingTemplate 会破坏这个功能。
我找不到任何关于 SimpMessageTemplate 消息顺序的文档,但是有很多关于“全功能消息代理”的评论,例如 RabbitMQ 和 ActiveMQ。 RabbitMQ 在某些情况下保证消息顺序(不确定这是否适用于 Spring 应用程序上的 WebSocket 消息)。我尝试根据this 指南进行设置,但Connection Factory 给了我一个"Could not autowire. No beans of Connection Factory type found."
万一我做错了什么,我尝试下载并运行教程项目 - 这也不起作用。它只是用一堆看起来像这样的调试打印显示“构建成功”:DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source. Returning [null]
如何在不破坏协议任何属性的情况下从 Spring 服务器发送 WebSocket 消息?
【问题讨论】:
-
代理或客户端是多线程的吗?
-
看起来代理不是多线程的,但客户端是。我会更深入地了解客户。谢谢!
-
@Atte,你用正确的客户试过了吗?我也有同样的问题,但是我没有多线程客户端...
标签: java spring websocket rabbitmq