【问题标题】:ActiveMQ InactivityMonitor params not applied on HTTP Transport connectionActiveMQ InactivityMonitor 参数未应用于 HTTP 传输连接
【发布时间】:2020-03-19 03:07:22
【问题描述】:

在我的团队中,我们在生产中使用 ActiveMQ 5.15.11,我们的消息消费者通过 HTTP 协议连接。由于我们在消费者端遇到网络问题,我们尝试在 activemq.xml 中禁用 InactivityMonitor(见下文)

    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://host:61616?maximumConnections=1000&amp;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 传输上,它适用于该协议。

提前感谢您的帮助。

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    对于 HTTP 传输,我认为没有执行标准的 OpenWire 协议协商步骤,这可能意味着服务器端的 max-inactivity-duration 配置在客户端是可见的。这导致客户端使用默认值进行不活动检查,我记得它是 30 秒左右,然后它分成更小的块进行读写检查。

    您可能需要将客户端配置为不使用相同的线格式选项进行检查。我认为其中任何一个都没有经过广泛的测试,因此可能存在通过 HTTP 传输包装器更改默认值的问题。如果它继续行为不端,那么您可能需要使用 ActiveMQ 项目打开一个 JIRA 以实现某些东西以让您更好地控制它。

    在客户端,您应该能够在 URI 上使用 transport.useInactivityMonitor=false 或仅使用 useInactivityMonitor=false 禁用不活动监视器。

    【讨论】:

    • 非常感谢您的帮助。我尝试在客户端使用transport.useInactivityMonitor=false,但它甚至拒绝连接。我想我会开一张 JIRA 票。
    • 听起来 HttpTransportFactory 可能对 URI 参数有一些限制。
    • 它可以在客户端连接 URI 上与useInactivityMonitor=false(不是transport.useInactivityMonitor=false)一起正常工作。小心,它在服务器上不起作用。非常感谢蒂姆·比什! :)
    • 很高兴,旧版 ActiveMQ 代码的烦恼之一是传输选项可能令人讨厌地不一致。服务器端选项应该可以工作,所以如果不是,那可能是另一个错误。
    猜你喜欢
    • 2017-07-03
    • 2018-01-28
    • 1970-01-01
    • 2018-01-26
    • 2015-08-26
    • 2021-12-06
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多