我对 Camel 有点陌生,所以如果这是一个愚蠢的问题,请原谅我!
在 Camel 中,我有一个与队列 queue-1
竞争的消费者列表。我希望每个消费者在尝试读取队列之间等待 1 小时,但是一旦过了一个小时,每个消费者就应该不断轮询,直到收到消息。一旦收到消息,它应该对其进行处理,然后等待一个小时,然后再尝试另一次读取,依此类推。
这是我设置的路线:
from("aws-sqs://queue-1?accessKey=ABC&secretKey=XYZ&maxMessagesPerPoll=1")
.unmarshal().base64()
.unmarshal().serialization()
.throttle(1)
.timePeriodMillis(TimeUnit.HOUR.toMillis(1))
.bean(new ProcessorBean())
.marshal().serialization()
.marshal().base64()
.to("aws-sqs://queue-2?accessKey=ABC&secretKey=XYZ");
据我了解,路由是同步执行的( specific components designed to work asynchronously 除外)。基于这样的理解,我相信这条路线满足了这些要求。
这能达到我想要的效果吗?为什么或为什么不?
最佳答案
您的路线将消耗队列中的一条消息,然后等待一小时。
如果您想等待一个小时然后阅读消息,请查看 ScheduledPollConsumer 选项 (Doc) 有些选项允许使用调度程序,例如 Quartz2或基于 Spring 的调度程序。
使用log如果您想确定的话,请使用组件:.to("log:com.mycompany.order?level=DEBUG")
。
关于java - Camel 每小时消耗不超过 1 条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454043/