Apache camel 使用Camel实现竞争消费者模式

Apache camel 使用Camel实现竞争消费者模式,apache-camel,Apache Camel,如何让竞争对手的消费者保持完全的动态性?Camel实现要求concurrentConsumers的价值。但是假设一个新的消费者启动并开始使用发送者的消息。那么,我如何记录并发消费者的数量呢?我假设您正在谈论JMS消费者 如果是这样,您可以设置concurrentConsumers和maxConcurrentConsumers,以允许活动使用者线程的数量根据需求增长/收缩。类似的内容将显式设置路由 from("activemq:queue:input?concurrentConsumers=1&a

如何让竞争对手的消费者保持完全的动态性?
Camel实现要求concurrentConsumers的价值。但是假设一个新的消费者启动并开始使用发送者的消息。那么,我如何记录并发消费者的数量呢?

我假设您正在谈论JMS消费者

如果是这样,您可以设置concurrentConsumers和maxConcurrentConsumers,以允许活动使用者线程的数量根据需求增长/收缩。类似的内容将显式设置路由

from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConsumers=5")
.to("log:+++consumed+++");
这就是说,如果您有其他路由(或Spring JMSTemplates等非路由使用者)开始使用同一资源(输入队列),那么总使用者的数量可能会高得多


您始终可以在AMQ web控制台中或通过JMX查看活动消费者的总数。阅读此处发布的几个相关问题后,这可能有助于明确定义您的用例。你的要求是可能的,但需要付出一些努力,因此,说明你正试图实现的目标可能会帮助你更快地找到解决方案。:)此外,concurrentConsumers只是初始化时创建的最小使用者数。将maxConcurrentConsumers设置为与concurrentConsumers相等将为您提供一个常量。虽然这不是“动态”的,但是如果你想在负载不高时减少消费者数量,你也必须设置
maxMessagesPerTask
属性。如上所述:
maxMessagesPerTask
选项必须设置为大于0的整数,线程才能按比例缩小。否则,线程数将保持在maxConcurrentConsumers,直到关闭。