【问题标题】:How to set a dispatch rate to ActiveMQ queue如何设置 ActiveMQ 队列的调度率
【发布时间】:2018-02-08 16:49:08
【问题描述】:
假设 ActiveMQ 中有一个有 50 多个消费者的队列,有没有办法将每秒最多 1 个事件发送给消费者?这是为了控制大量的事件调度。
事件生产者在我的应用程序之外。因此,我需要处理来自消费者端的受控调度。
我有一个配置为低至 5 的 jms 预取策略。
我不想在几秒钟内向消费者发送 100 条消息。相反,我希望它是一个稳定的流程。
如何配置队列消费者以在受控流中分派?
【问题讨论】:
标签:
activemq
message-queue
flooding
【解决方案1】:
据我所知,没有办法限制消费者。
您可以做的是使用内置的 Camel-routes 限制流向消费者队列的流量。也许您可以找到一种方法在您的案例中使用此功能?
- 将examples/camel.xml复制到您的conf文件夹中。
- 在camel.xml 文件中编辑连接工厂。在默认设置中,将代理 uri 更改为
vm://localhost?create=false
- 在你的activemq.xml中包含camel.xml
<include resource="camel.xml"/>
将camel.xml中的路由编辑成这样的(1msg/1000ms)
<route>
<description>Throttler 1 msg/s</description>
<from uri="activemq:msgs.in"/>
<throttle timePeriodMillis="1000" asyncDelayed="true">
<constant>1</constant>
<to uri="activemq:msgs.out"/>
</throttle>
</route>