我使用SpringMVC 4 + Tomcat。我的应用程序有2个类(A和B)和@Autowired SimpMessagingTemplate。每个类都有一个调用" convertAndSend"。
的线程A类发送一条由8个双字段和3个长字段组成的消息。它向大约发送消息。 500个主题,如" /topic/prices.X" (其中X - 一些随机字符串)。频率 - 单个循环中每秒最多4次(每个主题)。
B类发送的消息包含8个双字段,4个长字段和4个字符串字段。它将消息发送到像#34; / topic / dmaEvents"这样的单一主题。频率 - 每秒几次(最多可达20次)。
对于我的应用程序,保留消息顺序非常重要,因此我应用了此处描述的解决方案:
SockJS receive stomp messages from spring websocket out of order
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.taskExecutor().corePoolSize(1);
}
我们有大约10-20个客户端同时连接并订阅了所有主题。客户端应用程序 - .Net使用" websocket-sharp"具有STOMP协议的自定义实现的库。服务器在纽约,客户在芝加哥和伦敦。
在我们的UAT环境中一切正常,但在产品中,一位用户抱怨以下问题:
我用sequenceId标记了每条消息,并注意到来自ClassB的消息无论如何都以错误的顺序传递。例如,服务器发送:
客户收到:
谢谢。
答案 0 :(得分:0)
我遇到类似的问题,STOMP消息的停止/缓慢交付,结果是春天使用的反应堆库造成的。
将其更新为更高版本为我修复了它:
runtime("io.projectreactor:reactor-core:2.0.6.RELEASE")
runtime("io.projectreactor:reactor-net:2.0.6.RELEASE")
runtime("io.netty:netty-all:4.0.33.Final")