java - 检测ActiveMQ流控

标签 java activemq

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

经过调查,我很确定这是由于生产者流量控制造成的。 (我有一个相当标准的 activemq 设置)。发生这种情况的前一天(由于其他原因)我的消费者软件运行不稳定,甚至有一段时间停止接受连接。所以我猜这触发了这个。 (令我困惑的是,一天后请求仍然受到限制)。

问题 - 我如何确认请求已被限制。我对服务器进行了堆转储——内存中是否有我可以查找的数据?

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

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

最佳答案

你可以 configure your producer client抛出 javax.jms.ResourceAllocationException 异常,然后可以检测/记录这些异常,等等。只需设置以下其中一项...

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

关于java - 检测ActiveMQ流控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7490504/

相关文章:

java - 对于数据报接收器来说,多少个线程比较合适?

Spring启动非 fatal error ClassNotFoundException

java - 无法使用基于 JMS 的代码和 amqp 1.0 访问 ActiveMQ

java - WebSphere 尝试从 Internet 加载与 Spring 相关的模式

java - Eclipse 编译器和 javac 之间的差异 - 枚举、接口(interface)和泛型

java - 使用什么来重播 ActiveMQ 中的消息以及为什么?

mysql - 如何解决activeMQ msyql cluster get Attempting to acquire the Exclusive Lock错误?

jms - 将消息从一个 ActiveMQ 转发到另一个?

java - 出现次数(无数组)

java - @Override 注释的目的是什么?