检测ActiveMQ流量控制

时间:2011-09-20 19:14:42

标签: java activemq

我有一个生产系统,它使用ActiveMQ(5.3.2)将消息从服​​务器A发送到服务器B.几周前,系统莫名其妙地开始花费10+秒来发送消息。重启生产者后,系统工作正常。

经过调查,我很确定这是由于生产者流量控制。 (我有一个相当标准的activemq设置)。在此之前的前一天(由于其他原因),我的消费者软件一直表现不正常,甚至停止接受连接一段时间。所以我猜这引发了这个。 (令我感到困惑的是,请求在一天之后仍受到限制。)

问题 - 如何确认请求受到限制。我接受了服务器的堆转储 - 内存中的数据是否可以查找?

编辑:我发现了以下内容: 对于内存中的三个WireFormatNegotiator实例之一,WireFormatNegotiator.tcpNoDelayEnabled = false。我正在试图弄清楚这是什么。

第二个(也是更重要的),是否有一种方法可以使用JMX来判断消息是否受到限制?我想建立一个Nagios警报,让我知道将来是否会发生这种情况。我应该用JMX检查什么属性?

1 个答案:

答案 0 :(得分:0)

您可以configure your producer client抛出javax.jms.ResourceAllocationException异常,然后可以检测/记录等等,只需设置以下内容之一......

<systemUsage>
   <systemUsage sendFailIfNoSpaceAfterTimeout="3000">
   ...OR...   
   <systemUsage sendFailIfNoSpace="true">