如果只停止接受数据,我如何配置ActiveMQ以丢弃消费者?

时间:2010-05-24 22:28:36

标签: activemq

今天,我在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以完全放弃缓慢的消费者,我该怎么做?

4 个答案:

答案 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。

http://java.dzone.com/articles/coming-activemq-59-new-way

答案 2 :(得分:1)

你可以配置下面的属性 - “sendFailIfNoSpaceAfterTimeout”,用于向制作者抛出错误,而不是阻止。

<systemUsage>
 <systemUsage sendFailIfNoSpaceAfterTimeout="3000">
            <memoryUsage>
                <memoryUsage limit="256 mb"/>
            </memoryUsage>
 </systemUsage>
</systemUsage>

答案 3 :(得分:0)

我不能给你一个关于如何放弃客户端的答案(事实上:我不太确定它是否可能在一起)但你可以做的是添加一个不阻止生产者的政策:

“memoryLimit =”10mb“producerFlowControl =”false“/&gt;

这样,您的制作人不会受到消费者的影响。