2

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

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

因此,例如,我可能会添加一组以每秒 10 次的速度消耗的消息,另一组应该以每秒 1 次的速度消耗,依此类推。

我知道在骆驼中设置路由和将消息分组到队列等的基础知识,但只是无法从文档中弄清楚这一点。

4

4 回答 4

4

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

例如

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  
于 2009-01-19T12:38:16.483 回答
3

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

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

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

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

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

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


克劳斯易卜生阿帕奇骆驼提交者

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

于 2009-01-18T09:08:40.610 回答
1

是的,看起来您正在寻找代理端节流以避免消费者阻塞。

您是否在 ActiveMQ 用户/开发者论坛上提出过您的请求?

于 2009-02-17T05:25:24.243 回答
0

好的,我将更详细地布置场景,并据我所知突出主要障碍。

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

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

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

我添加了来自第 1 组的 20000 条消息和来自第 2 组的 20000 条消息

因为节流器是消费者端,所以第 1 组激活的延迟器将通过快速填充其输入缓冲区而使其变慢,然后第 2 组消息将卡住......即使我按照James使用多个队列也是如此。

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

基本上,我想知道的是,是否有任何方法可以做代理,而不是消费者端节流,或其他解决方案,消费者可以在不最终阻塞的情况下进行节流。

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

于 2009-01-20T21:24:45.500 回答