如何控制Spring从队列中接收的速率?

Ray*_*Ray 7 java spring jms

我使用Spring的消息驱动的POJO框架(DefaultMessageListenerContainer特别是)来监听几个队列和主题.

在一个特别队列的情况下,需要减慢我排空队列的速率,每五分钟一个消息的顺序.消息的实际处理是亚秒操作,但我希望监听器在消息之间闲置一段时间.

我已经创建了一些hack,但它确实是次优的:我所做的是将max concurrency设置为1并Thread.sleep(..)在处理每条消息后添加一个.我想找到一种方法,而不是DefaultMessageListenerContainer在尝试接收之间等待,而不是让处理程序在将要处理消息期间进行等待.

我曾经考虑过是否会有ScheduledExecutor帮助,但我意识到需要在任务生成的地方进行限制.是否有一些方法DefaultMessageListenerContainer可以覆盖以实现我追求的目标?

Mat*_*dge 2

修改消费者行为的另一种方法是使用 Apache Camel 来延迟该特定队列上的消息。

http://camel.apache.org/delayer.html描述了 Camel Delayer 模式的功能。例如:

<route>
    <from uri="jms:YOURQUEUE"/>
    <delay>
        <constant>1000</constant>
    </delay>
    <to uri="jms:DELAYEDQUEUE"/>
</route>
Run Code Online (Sandbox Code Playgroud)

然后您将使用 DELAYEDQUEUE,所有消息都会延迟 1 秒。