Apache camel 如何延迟使用来自ActiveMQ的Apache Camel中的消息

Apache camel 如何延迟使用来自ActiveMQ的Apache Camel中的消息,apache-camel,activemq,throttling,Apache Camel,Activemq,Throttling,我有一个要求,当客户端应用程序在5秒内发送超过1000个请求时,我需要通过塑造(排队)入站流量来调节流量 我遵循的解决方案是: 我有一个驼峰:将最大请求数设置为1000,时间跨度设置为5秒。当超过阈值时,我将捕获节流异常,并且在OneException块中,我将向ActiveMQ请求队列发送节流消息,以便稍后进行进一步处理,因为Camel基于1000 req/5 sec配置过载 我成功地实现了上述功能,但我希望驼峰消费者稍后能够进一步处理ActiveMQ请求队列中的所有消息,而不是一次性处理每个

我有一个要求,当客户端应用程序在5秒内发送超过1000个请求时,我需要通过塑造(排队)入站流量来调节流量

我遵循的解决方案是: 我有一个驼峰:将最大请求数设置为1000,时间跨度设置为5秒。当超过阈值时,我将捕获节流异常,并且在OneException块中,我将向ActiveMQ请求队列发送节流消息,以便稍后进行进一步处理,因为Camel基于1000 req/5 sec配置过载

我成功地实现了上述功能,但我希望驼峰消费者稍后能够进一步处理ActiveMQ请求队列中的所有消息,而不是一次性处理每个消息,延迟10秒,例如

我无法在ActiveMQ中设置参数来表示延迟消息到消费者,也不能延迟骆驼消费者从请求队列中提取消息

我如何满足我的上述要求

请帮忙

谢谢 Ramesh.

在另一个例子中,获奖答案推广了以下解决方案:

from("activemq:queueA").throttle(10).to("activemq:queueB")
对我来说,这个解决方案只有在定义预取限制时才有意义,没有预取限制,使用者就不会关心任何下游节流。这条路线应该有效:

from("activemq:queueA?&destination.consumer.prefetchSize=10").throttle(10).to("activemq:queueB")
这就是它背后的真相,就在这里

因此,ActiveMQ对在任何时间点可以流式传输到消费者的消息数量使用预回迁限制。一旦达到预回迁限制,将不再向使用者发送更多消息,直到使用者开始发回消息确认(以指示消息已被处理)。实际预取限制值可以按每个用户指定


您可以启用ActiveMQ的计划传递,然后在Camel Route AMQ_scheduled_DELAY标头中设置,然后将exchange发送到队列。这将导致在消息出现在队列中之前引入AMQ_SCHEDULED_delay millis延迟(即可供使用)


检查此项:

你好,弗里茨。。。谢谢你的回复。。。我想设置延迟时间间隔,而不是一次获取x条消息。您能为该用例提供帮助吗?只需将prefetchSize设置为1。您使用的预取的一个重要特性是,消费者等待进一步消费,直到最后获取的消息得到确认。