【发布时间】:2020-01-19 09:59:39
【问题描述】:
我们在我们的项目中使用 STOMP 代理中继(外部代理 - ActiveMQ 5.13.2),请参阅 https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#websocket-stomp-handle-broker-relay
我们使用以下堆栈:
org.springframework:spring-jms:jar:5.1.8.RELEASE
org.springframework:spring-messaging:jar:5.1.8.RELEASE
io.projectreactor:reactor-core:jar:3.2.8.RELEASE
io.projectreactor.netty:reactor-netty:jar:0.8.6.RELEASE
io.netty:netty-all:jar:4.1.34.Final
有时(假设每 2 周一次)我们可以在 tomcat catalina.out 日志中观察到错误
2019-08-21 13:38:58,891 [tcp-client-scheduler-5] ERROR com.*.websocket.stomp.SimpMessagingSender - BrokerAvailabilityEvent[available=false, StompBrokerRelay[ReactorNettyTcpClient[reactor.netty.tcp.TcpClientDoOn@219abb46]]]
2019-08-21 13:38:58,965 [tcp-client-scheduler-1] ERROR org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler - Transport failure: java.lang.IllegalStateException: No TcpConnection available
该错误之后 STOMP 通信中断(system 连接 - 单个 TCP 连接不可用)
似乎一切都是在我们从以下位置更新堆栈时开始的:
org.springframework:spring-jms:jar:5.0.8.RELEASE
org.springframework:spring-messaging:jar:5.0.8.RELEASE
io.projectreactor:reactor-core:jar:3.1.8.RELEASE
io.projectreactor.netty:reactor-netty:jar:0.7.8.RELEASE
io.netty:netty-all:jar:4.1.25.Final
ActiveMQ 版本未更改
spring 报告了一个错误,当system 连接丢失时自动重新连接失败请参阅:
https://github.com/spring-projects/spring-framework/issues/22080
现在有 3 个问题:
- 如何让这个问题重现性更好?
- 如何解决此重新连接行为? :)
- 如何防止丢失此连接? :)
编辑 23.09.2019
发生错误后,端口 61613(STOMP) 的 TCP 堆栈如下(请注意 CLOSE_WAIT 状态):
netstat -an | grep 61613
tcp6 0 0 :::61613 :::* LISTEN
tcp6 2 0 127.0.0.1:49084 127.0.0.1:61613 CLOSE_WAIT
【问题讨论】:
-
虽然此处涉及 ActiveMQ,但它似乎不是问题的根源(特别是考虑到版本没有更改的事实)所以我删除了
activemq标签。 -
只是一个想法,但是在主路由器离线并重新启动后会发生这种情况吗?我有一些软件似乎需要在网络出现故障或恢复时重新启动服务。
标签: java websocket stomp spring-messaging