我遇到的问题是有大量已建立的带有activemq的套接字。
根据ActiveMQ文档,套接字将因不活动而关闭。但是在我的应用程序中,经过一段时间后,由于不活动,我有一个巨大的套接字连接。这是我的设置:
客户端配置的soTimeout 30s,connectionTimeout 10s
经纪商配置将maxInactivityDuration设为30秒
在日志文件中,我遇到以下异常,但我无法理解为什么socket没有按照activemq文档关闭。
[WARN] [20 / Nov / 17 23:58:06.473] [运输] - 运输连接 to:tcp://10.227.129.219:34896失败: org.apache.activemq.transport.InactivityIOException:频道是 对于(> 30000)长也不活动(没有连接尝试): TCP://10.227.129.219:34896
提到了有效的mq文档here
使用默认值;如果没有写入或读取数据 连接30秒,InactivityMonitor启动 InactivityMonitor抛出InactivityIOException并关闭 与连接相关的传输
有关您的信息,我使用的是activemq 5.13.3。以下是netstat
命令的快照。
netstat -an | grep 9999
tcp 0 0 X.X.X.X:9999 Y.Y.Y.Y:38200 ESTABLISHED
tcp 0 0 X.X.X.X:9999 Y.Y.Y.Y:44582 ESTABLISHED
tcp 0 0 X.X.X.X:9999 Y.Y.Y.Y:41278 ESTABLISHED
... (few hundreds in total)
答案 0 :(得分:0)
根据您共享的日志文件,TCP握手完成,然后activemq协议(应用程序级别)正在等待建立连接。由于任何问题(例如网络连接等),无法建立连接。我猜你的tcp keeplive配置已启用。因此,TCP连接没有关闭,应用程序(例如activemq)也没有关闭它。