activemq内嵌到java程序,broker和Consumer所在程序直接kill,producer检测不到失连
服务器端有多个进程,其中进程A中启动broker和consumer监听其他进程状态,进程B、C、D都有producer,会定时发报活信息,
B、C、D按顺序启动,这时候直接在任务管理器中kill进程A,进程B无法检测到connection断开,重启A后,B的报活消息始终收不到,将activemq外置,直接中bat起的话,一切正常,有谁知道是怎么回事?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
上述描述问题B、C、D都是A的子进程!
现在发现问题在于,activemq所在的java进程如果启动子进程,该父进程重启后与之前的connection都失连,经定位,发现父进程关闭后,子进程中发生阻塞:
"ActiveMQ Transport: tcp:///127.0.0.1:61616@10773" prio=6 tid=0x000000000a9ef000 nid=0x3310 runnable [0x000000000f47f000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50)
at org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:604)
at org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58)
at org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:589)
at java.io.DataInputStream.readInt(DataInputStream.java:370)
at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None