【问题标题】:How to guarantee WebSocket message order on a Java/Spring app [duplicate]如何保证 Java/Spring 应用程序上的 WebSocket 消息顺序 [重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2014-06-03
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多