【发布时间】:2020-03-19 03:07:22
【问题描述】:
在我的团队中,我们在生产中使用 ActiveMQ 5.15.11,我们的消息消费者通过 HTTP 协议连接。由于我们在消费者端遇到网络问题,我们尝试在 activemq.xml 中禁用 InactivityMonitor(见下文)
<transportConnectors>
<transportConnector name="openwire" uri="tcp://host:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="http" uri="http://host:61617?wireFormat.maxInactivityDuration=0"/>
</transportConnectors>
似乎没有应用“wireFormat.maxInactivityDuration=0”,因为我们在消费者中有来自 InactivityMonitor 的日志:
2020-03-18 00:00:03,426 [DEBUG] - - - WriteChecker: 10000ms elapsed since last write check.
2020-03-18 00:00:03,426 [DEBUG] - - - Running WriteCheck[https://host:443/activemq]
2020-03-18 00:00:03,509 [DEBUG] - - - WriteChecker: 10000ms elapsed since last write check.
2020-03-18 00:00:03,509 [DEBUG] - - - Running WriteCheck[https://host:443/activemq]
2020-03-18 00:00:03,514 [DEBUG] - - - WriteChecker: 10000ms elapsed since last write check.
2020-03-18 00:00:03,514 [DEBUG] - - - Running WriteCheck[https://host:443/activemq]
2020-03-18 00:00:03,642 [DEBUG] - - - WriteChecker: 10000ms elapsed since last write check.
2020-03-18 00:00:03,642 [DEBUG] - - - Running WriteCheck[https://host:443/activemq]
2020-03-18 00:00:03,706 [DEBUG] - - - WriteChecker: 10000ms elapsed since last write check.
2020-03-18 00:00:03,706 [DEBUG] - - - Running WriteCheck[https://host:443/activemq]
2020-03-18 00:00:03,738 [DEBUG] - - - WriteChecker: 10000ms elapsed since last write check.
2020-03-18 00:00:03,738 [DEBUG] - - - Running WriteCheck[https://host:443/activemq]
此外,一旦我们得到长时间的网络延迟,我们也会得到日志:
2020-03-01 20:43:17,578 [WARN ] - - - Transport (https://host:443/activemq) failed , attempting to automatically reconnect: {}
org.apache.activemq.transport.InactivityIOException: Channel was inactive for too (>30000) long: https://host:443/activemq
at org.apache.activemq.transport.AbstractInactivityMonitor$5.run(AbstractInactivityMonitor.java:246)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
注意 1:ActiveMQ 客户端是 JMS 消费者。
注意 2:我们尝试禁用 InactivityMonitor 在 TCP 传输上,它适用于该协议。
提前感谢您的帮助。
【问题讨论】: