blo*_*lob 5 java queue activemq-classic dispatch
我将ActiveMQ 5.8与在骆驼路线中配置的通配符使用者一起使用。
我正在使用默认的ActiveMQ配置,因此我具有以下默认值
prefetch = 1
dispatch policy= Round Robin
Run Code Online (Sandbox Code Playgroud)
现在,我启动了一个消费者jvm,其中每个队列有5个消费者。两个队列具有相同类型的消息和相同数量的消息。
消费者除了打印消息外什么都不做(因此没有数据库阻塞或缓慢的消费者问题)
编辑 我已将每个队列的preFetch设置为1
我观察到的是,一个队列比另一个队列更快地耗尽了资源。
我期望的是队列以相同的速度耗尽,这是一种负载平衡。
一个令人惊讶的发现是,尽管activemq Webconsole显示每个队列有5个使用者

调试使用者时,我仅从骆驼流中看到5个线程/使用者的通配符队列* .processQueue

上述行为的原因是什么?如何确保所有队列以相同的速度消耗?
是否有人在编写自定义调度策略或覆盖activemq的默认设置方面有经验可共享?
我能够找到对此行为的参考
通配符队列消费者的消息分发是随机的。
http://activemq.2283324.n4.nabble.com/Wildcard-and-message-distribution-td2346132.html#a2346133
尽管这可以通过设置适当的预取大小来调整。
经过反复试验,我得出了以下公式,在消费者之间公平分配,并且所有队列以几乎相同的速度出队。
prefetch = number of wildcard consumers
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |