如何设置 ActiveMQ 停止接受消息?

Posted

技术标签:

【中文标题】如何设置 ActiveMQ 停止接受消息?【英文标题】:How to set ActiveMQ to stop accepting messages? 【发布时间】:2013-05-09 13:58:12 【问题描述】:

我想知道在 ActiveMQ 中是否有任何属性可以限制 ActiveMQ 在达到某个阈值后不接受输入队列中的消息? 到目前为止,我能够使用 内存约束 找出它的流量控制。 我想在输入队列达到其特定阈值时动态阻止我的输入队列。 有没有其他软件可以帮助我实现目标?

【问题讨论】:

【参考方案1】:

可能的方法是将自定义 broker interceptor 插入 ActiveMQ。

为您的 Spring 代理配置补充:

<plugins>
  <bean id="myPlugin" class="org.foo.CheckThresholdPlugin"/>    
</plugins>

然后扩展 BrokerPlugin 以覆盖 send 方法。

package org.foo;

import org.apache.activemq.broker.Broker;
import org.apache.activemq.broker.BrokerPlugin;

public class CheckThresholdPlugin extends BrokerFilter  

    public void send(ProducerBrokerExchange producer, Message message) throws Exception      
        boolean isOverThreshold = /* figure it out by getting Destination from Message */
        if (isOverThreshold) 
          throw new Exception("The threshold is exceeded.");
         else 
          super.send(producer, message);
        
    

 

【讨论】:

以上是关于如何设置 ActiveMQ 停止接受消息?的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST 时的 ActiveMQ 持久性问题

ActiveMQ

在没有启用咨询支持的情况下,代理的 activemq 静态网络是不是会停止转发消息?

ActiveMQ

当目的地不可用时如何停止使用骆驼路线中的消息

深入浅出JMS--Spring和ActiveMQ整合的完整实例