java - 如何保证 Java/Spring 应用程序上的 WebSocket 消息顺序

标签 java spring websocket rabbitmq

<分区>

我们目前正在使用 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 found.”

以防万一我做错了什么,我尝试只下载并运行教程项目 - 但也没有用。它只是显示“构建成功”以及一堆如下所示的调试打印:DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - 在任何属性源中找不到键“spring.liveBeansView.mbeanDomain”。返回 [null]

如何在不破坏协议(protocol)的任何属性的情况下从 Spring 服务器发送 WebSocket 消息?

最佳答案

如果有人用的是spring默认的SockJS + STOMP,那就是spring的问题。有解决办法SockJS receive stomp messages from spring websocket out of order

关于java - 如何保证 Java/Spring 应用程序上的 WebSocket 消息顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37743951/

相关文章:

php - 通过tcp套接字将mysql select查询的结果从php发送到python

java - 连接到 JDBC 事务的开始

java - 使用自定义注释扩展类级别 RequestMapping

java - 单击 RadioButton 会使应用程序崩溃

java - 初始化多维数组时出现问题

java - 使用 eureka 和 Ribbon 的测试服务

java - Spring 安全 3 : Is it possible to see which AuthenticationProvider has authenticated a session?

java - ClassPathXmlApplicationContext 和 ClassPathResource 之间的区别

node.js - `RSV2 and RSV3 must be clear` 中的错误 `ws`

c# - 使用 ClientWebSocket .net 核心测试 TestHost.WebSocketClient