2011-09-20 165 views
1

我有一个使用ActiveMQ(5.3.2)将消息从服​​务器A发送到服务器B的生产系统。几个星期前,系统莫名其妙地开始花费10多秒来发送消息。系统重启后,系统运行良好。检测ActiveMQ流量控制

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

问题 - 我如何确认请求被限制。我拿了服务器的堆转储 - 我可以查找内存中的数据吗?

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

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

回答

0

可以configure your producer client扔,然后可以检测/登录javax.jms.ResourceAllocationException异常等,只要设定下面的一个...

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

很有必要知道 - 感谢。仍然希望有人对我的问题有更直接的回答。 –

+0

请问,这是从客户端/监视器的角度来检测流量控制。如果你看到这些错误,那么生产者流量控制就会“踢”进来。如果你没有设置这些,那么send()将会阻塞,直到生产者可以恢复。 –

+0

这很有帮助,谢谢 –