使用Camel动态限制ActiveMQ消息队列

时间:2009-01-17 21:24:37

标签: java jms activemq apache-camel

我是一个特定场景的ActiveMQ / Camel noob,我首先想知道是否有可能,其次是否有人​​可能提供一点方向。

基本上我需要从队列中执行动态限制。 I.E能够在运行时设置 从队列中消耗特定消息组的速率。

例如,我可能会添加一组消息,每秒消耗10个,另一个消息应该以每秒1消耗,等等。

我知道在camel中设置路由和将消息分组到队列等的基础知识,但是无法从文档中解决这个问题。

4 个答案:

答案 0 :(得分:4)

您可以使用Camel现有的throttler,然后为需要配置不同节流率的每种类型的消息使用不同的队列?

e.g。

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  

答案 1 :(得分:3)

为什么不在Apache Camel JIRA中添加RFE?

您确定给定消息组的速率有什么逻辑?

如果不同的消息组遍及同一个节流器,则可能会变得复杂。它需要鉴别器来确定任何消息它属于哪个组,从而哪个速率应该通过节流器。

如果您需要一些时间来填写您的用例并记录RFE,那么我确信Camel社区,开发人员可以提供帮助。

您可以尝试自己实施。基本上任何东西都是处理器,所以你可以做一个from(“activemq:queue:foo”)。process(myOwnThrottler).to(“bean:handleMessage”);

您可以扩展Camel中的一些类: - DelegateProcessor - DelayProcessorSupport - Throttler


克劳斯易卜生 Apache Camel Committer

开源集成:http://fusesource.com 博客:http://davsclaus.blogspot.com/

答案 2 :(得分:1)

是的,你看起来正在寻找经纪人方面的限制,以避免消费者阻止。

您是否在ActiveMQ用户/ dev论坛上提出了请求?

答案 3 :(得分:0)

好的,我会详细介绍一下这个场景,并根据我的意思突出显示主要的拦截器。

我有两组消息(实际上规模要大得多),每个都有不同的限制要求 - 比方说,我在消息头中将其指定为flowRate和flowTime。

  • 第1组:FlowRate = 1; flowTime = 60(每分钟1次)
  • 第2组:FlowRate = 1; flowTime = 1 (每秒1次)

我按照Claus实现了一个处理器,它检查标题字段并将它们用作延迟输入。

我从第1组添加20000条消息,从第2组添加20000条消息

因为限制器是消费者方,因此第1组激活的延迟器将通过快速填充其输入缓冲区而使其变慢,然后第2组消息将被卡住......即使我按照{{3使用多个队列}}

我意识到我可以使用JMXGroupID标头对消息进行分组并实现多个消费者,但不要认为这会扩展到容纳 n 组的要求。

我想知道的是,基本上,如果有任何方法可以做经纪人,而不是消费者端限制,或其他一些解决方案,消费者可以在没有最终阻止的情况下进行节制。

希望我已经清楚地解释了自己,并感谢到目前为止的建议。