今天,我在ActiveMQ 5.3.2控制台上看到了很多错误:
INFO | Usage Manager内存限制 到达。停止生产者(ID:...)到 防止洪水主题:// mytopic。看到 http://activemq.apache.org/producer-flow-control.html 了解更多信息(阻止:3422ms)
我做了一些调整,并确定订户已经出去吃午餐了:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp6 0 130320 10.208.87.178:61613 66.31.31.216:37951 ESTABLISHED
在这种情况下,我不希望生产者阻止;我宁愿完全放弃客户端。 http://activemq.apache.org/slow-consumer-handling.html解释了如何限制排队的消息数量,这是一个良好的开端,但实际上并不是我想要的。 http://activemq.apache.org/slow-consumers.html暗示能够放弃一个缓慢的消费者,但没有解释如何做到这一点。
所以,这是我的问题:是否可以设置ApacheMQ以完全放弃缓慢的消费者,我该怎么做?
答案 0 :(得分:1)
我会关闭你想要的主题或者所有主题的producerFlowControl:
<policyEntry topic=">" producerFlowControl="false">
由于消息队列可能会持续增长,因此可以使您现在耗尽内存或磁盘空间。因此,请确保设置驱逐策略和待处理的邮件限制策略,如下所示:
<messageEvictionStrategy>
<oldestMessageEvictionStrategy/>
</messageEvictionStrategy>
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="10"/>
</pendingMessageLimitStrategy>
这将在达到10的限制后开始丢弃消息。最早的消息将首先抛出。
答案 1 :(得分:1)
在Active MQ 5.9.0中进行了改进的AbortSlowConsumerStrategy在这方面应该有所帮助。我没有机会对各种配置进行彻底测试。但我认为这就是你要找的东西,特别是ignoreIdleConsumers = true。
答案 2 :(得分:1)
你可以配置下面的属性 - “sendFailIfNoSpaceAfterTimeout”,用于向制作者抛出错误,而不是阻止。
<systemUsage>
<systemUsage sendFailIfNoSpaceAfterTimeout="3000">
<memoryUsage>
<memoryUsage limit="256 mb"/>
</memoryUsage>
</systemUsage>
</systemUsage>
答案 3 :(得分:0)
我不能给你一个关于如何放弃客户端的答案(事实上:我不太确定它是否可能在一起)但你可以做的是添加一个不阻止生产者的政策:
“memoryLimit =”10mb“producerFlowControl =”false“/&gt;
这样,您的制作人不会受到消费者的影响。