java – activemq通配符消费者如何工作?

我正在使用ActiveMQ 5.8与在camel路由中配置的通配符使用者.

我使用默认的ActiveMQ配置,所以我有如下默认值

prefetch = 1
dispatch policy= Round Robin

现在我启动一个消费者jvm,每个消费者有2个队列,每个消费者有2个.队列具有相同类型的消息和相同数量的消息.

消费者除了打印消息之外什么都不做(所以没有数据库阻塞或消费者问题缓慢)

编辑
我为每个队列设置了preFetch为1

我观察到的是其中一个排队比其他排队更快.

我所期待的是队列以相同的速度耗尽,负载平衡.

一个令人惊讶的观察是
虽然activemq webconsole为每个队列显示5个消费者

当我调试我的消费者时,我看到来自camel流的5个线程/消费者只有一个通配符队列* .processQueue

上述行为的原因是什么?
如何确保所有队列以相同的速度消耗?

有没有人有经验分享写自定义调度策略或覆盖activemq的默认值?

最佳答案 我能够找到对此行为的引用

通配符队列使用者的消息分发是随机的.

http://activemq.2283324.n4.nabble.com/Wildcard-and-message-distribution-td2346132.html#a2346133

虽然可以通过设置适当的预取大小来调整.

试用后&错误,我得到了以下公式,以便在消费者中公平分配,并且所有队列都以几乎相同的速度排队.

prefetch = number of wildcard consumers
点赞