我有一个生产系统,它使用ActiveMQ(5.3.2)将消息从服务器A发送到服务器B.几周前,系统莫名其妙地开始花费10+秒来发送消息。重启生产者后,系统工作正常。
经过调查,我很确定这是由于生产者流量控制。 (我有一个相当标准的activemq设置)。在此之前的前一天(由于其他原因),我的消费者软件一直表现不正常,甚至停止接受连接一段时间。所以我猜这引发了这个。 (令我感到困惑的是,请求在一天之后仍受到限制。)
问题 - 如何确认请求受到限制。我接受了服务器的堆转储 - 内存中的数据是否可以查找?
编辑:我发现了以下内容: 对于内存中的三个WireFormatNegotiator实例之一,WireFormatNegotiator.tcpNoDelayEnabled = false。我正在试图弄清楚这是什么。
第二个(也是更重要的),是否有一种方法可以使用JMX来判断消息是否受到限制?我想建立一个Nagios警报,让我知道将来是否会发生这种情况。我应该用JMX检查什么属性?
答案 0 :(得分:0)
您可以configure your producer client抛出javax.jms.ResourceAllocationException异常,然后可以检测/记录等等,只需设置以下内容之一......
<systemUsage>
<systemUsage sendFailIfNoSpaceAfterTimeout="3000">
...OR...
<systemUsage sendFailIfNoSpace="true">