2009-01-17 132 views
2

我是一个ActiveMQ /骆驼noob与心中的具体情况,我想知道如果这是可能的,其次是否有人​​可能提供一个小方向。动态调节一个ActiveMQ消息队列与骆驼

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

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

我知道设置骆驼和消息分组到队列等路线的基本知识,但只是不能从文档中弄清楚这一点。

回答

1

是啊看起来像你正在寻找经纪人侧throtteling,以避免消费者阻止。

您是否在ActiveMQ用户/开发论坛中提出了您的请求?

3

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

对于给定的一组消息,确定速率的逻辑是什么?

如果不同的消息组通过同一个调节器,它可能会变得复杂。它需要鉴别器来确定它属于哪个组的哪个消息,因此哪个速率应该通过调节器。

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

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

可以延长一些类的骆驼: - DelegateProcessor - DelayProcessorSupport - 节流


克劳斯易卜生 Apache的骆驼提交者

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

+1

刚刚买了你的书“骆驼在行动”克劳斯的EAP副本。这是非常好的,我可以肯定地推荐给任何其他人抓住,或想了解更多关于骆驼。非常深入的东西。 – mysomic 2010-09-05 12:21:16

4

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

例如

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

OK,我会稍微详细地制定出方案并尽可能我可以告诉突出主要拦截。

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

  • 组1:FlowRate = 1; flowTime = 60(1每分钟)
  • 组2:FlowRate = 1;流动时间= 1 (1每秒)

我实现处理器按照Claus其检查报头字段,并用它们作为延迟输入。

我从组1和20000从组中添加20000个消息2

由于调节器是消费者侧,由第1组激活延迟将导致其通过快速填充它的输入缓冲器和第2级的消息,成为缓慢将然后卡住...即使我按照James使用多个队列。

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

我基本上想知道的是,如果有任何方法可以做代理,而不是消费者侧调节,或者其他解决方案,消费者可以调节而不会最终阻止。

希望我已经清楚地解释了自己,并感谢迄今为止提出的建议。