我是一个 ActiveMQ / Camel 菜鸟,有一个特定的场景,我首先想知道是否有可能,其次是否有人可以提供一点方向。
基本上我需要在队列之外执行动态限制。IE 能够在运行时设置从队列中消耗特定消息组的速率。
因此,例如,我可能会添加一组以每秒 10 次的速度消耗的消息,另一组应该以每秒 1 次的速度消耗,依此类推。
我知道在骆驼中设置路由和将消息分组到队列等的基础知识,但只是无法从文档中弄清楚这一点。
我是一个 ActiveMQ / Camel 菜鸟,有一个特定的场景,我首先想知道是否有可能,其次是否有人可以提供一点方向。
基本上我需要在队列之外执行动态限制。IE 能够在运行时设置从队列中消耗特定消息组的速率。
因此,例如,我可能会添加一组以每秒 10 次的速度消耗的消息,另一组应该以每秒 1 次的速度消耗,依此类推。
我知道在骆驼中设置路由和将消息分组到队列等的基础知识,但只是无法从文档中弄清楚这一点。
您可以只使用 Camel 现有的节流器,然后为需要配置不同节流率的每种类型的消息使用不同的队列吗?
例如
from("activemq:Queue1.Input").
throttle(20).
to("activemq:Queue1.Output");
from("activemq:Queue2.Input").
throttle(5).
to("activemq:Queue2.Output");
为什么不在 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/
是的,看起来您正在寻找代理端节流以避免消费者阻塞。
您是否在 ActiveMQ 用户/开发者论坛上提出过您的请求?
好的,我将更详细地布置场景,并据我所知突出主要障碍。
我有 2 组消息(实际上规模要大得多),每组都有不同的限制要求 - 假设我在消息头中将其指定为 flowRate 和 flowTime。
我按照Claus实现了一个处理器,它检查标题字段并将它们用作延迟器输入。
我添加了来自第 1 组的 20000 条消息和来自第 2 组的 20000 条消息
因为节流器是消费者端,所以第 1 组激活的延迟器将通过快速填充其输入缓冲区而使其变慢,然后第 2 组消息将卡住......即使我按照James使用多个队列也是如此。
我意识到我可以使用 JMXGroupID 标头对消息进行分组并实现多个消费者,但不认为这会扩展到容纳n 个组的要求。
基本上,我想知道的是,是否有任何方法可以做代理,而不是消费者端节流,或其他解决方案,消费者可以在不最终阻塞的情况下进行节流。
希望我已经清楚地解释了自己,并感谢到目前为止的建议。