Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在websocket上跺脚的延迟_Java_Spring_Websocket_Stomp - Fatal编程技术网

Java 在websocket上跺脚的延迟

Java 在websocket上跺脚的延迟,java,spring,websocket,stomp,Java,Spring,Websocket,Stomp,我使用SpringMVC4+Tomcat。我的应用程序有两个类(A和B)和@Autowired SimpMessageTemplate。每个类都有一个调用“convertAndSend”的线程 类发送一条消息,该消息由8个双字段和3个长字段组成。它向大约500个主题发送消息,如“/topic/prices.X”(其中X-一些随机字符串)。频率-在单个循环中每秒最多4次(针对每个主题) 类B发送的消息由8个双字段、4个长字段和4个字符串字段组成。它将消息发送到单个主题,如“/topic/dmaEv

我使用SpringMVC4+Tomcat。我的应用程序有两个类(A和B)和@Autowired SimpMessageTemplate。每个类都有一个调用“convertAndSend”的线程

类发送一条消息,该消息由8个双字段和3个长字段组成。它向大约500个主题发送消息,如“/topic/prices.X”(其中X-一些随机字符串)。频率-在单个循环中每秒最多4次(针对每个主题)

类B发送的消息由8个双字段、4个长字段和4个字符串字段组成。它将消息发送到单个主题,如“/topic/dmaEvents”。频率-每秒几次(最多可达20次)

对于我的应用程序,保留消息顺序非常重要,因此我应用了下面介绍的解决方案:

我们有大约10-20个客户端同时连接并订阅所有主题。客户端应用程序-.Net一个使用“websocket sharp”库和STOMP协议的自定义实现的应用程序。服务器在纽约,客户端在芝加哥和伦敦

在我们的UAT环境中,一切正常,但在prod one中,用户抱怨以下问题:

  • 在某些情况下,来自B类的消息以大约30-40秒的延迟传送到客户端。同时,来自A类的消息将毫不延迟地发送。当以最大频率(每个主题每秒4次=每秒2000条消息)发送来自A类的消息时,会发生这种情况。当频率降低时,延迟消失
我用sequenceId标记了每条消息,并注意到来自ClassB的消息以错误的顺序传递。例如,服务器发送:

  • message1->/topic/prices.A
  • message2->/topic/prices.B
  • message3->/topic/dmaEvents
  • message4->/topic/prices.C
  • message5->/topic/prices.D
客户收到:

  • message1->/topic/prices.A
  • message2->/topic/prices.B
  • message4->/topic/prices.C
  • message5->/topic/prices.D
  • message3->/topic/dmaEvents
问题1:这是一种预期的行为吗

问题2:延迟的原因可能是什么?我是否应该使用registration.taskExecutor().corePoolSize(1)除去解决方案;并实现一个逻辑来保护客户端的消息顺序


谢谢。

我也遇到了类似的问题,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")
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")