Apache Camel立即从SQS中读取



我有一个非常巨大的camel管道,它从消费来自SQS的消息开始。整个过程所需的时间各不相同。从5秒到30分钟,在这里很难猜测。

我想要实现的目标:

  1. 不要猜测可见性超时大小,只要消息被消耗掉就从SQS中删除消息

我已经尝试过的:

  1. 已尝试Camel选项deleteAfterRead=true->没有帮助,因为正如文档中所述:在读取(并由路由处理(消息后从SQS中删除消息而且我有庞大的管道。所以处理的需求在这里失败了
  2. 试图增加可见性超时,但正如我所说,这只是一个猜测游戏,我想开发更可靠的解决方案

感谢您的帮助!

如果您没有完成处理,那么您当然不应该在使用消息时立即删除它,因为如果应用程序崩溃,您将丢失消息。

相反,如果您意识到您的处理时间接近原始可见性超时,则应手动延长可见性超时。不确定您将如何在Camel中实现它,但我们之前集成到了默认的springframework.cloud.aws.messaging中:https://github.com/Mercateo/sqs-utils

如果像OP所说的那样,您不介意在服务器崩溃的情况下丢失消息,那么有一个解决方法,将消息发送到wireTap并在那里进行处理。这允许主路由提前结束,并向队列发送deleteMessage

另一个有趣的实际情况是异常:如果您有一个异常处理程序,并在OnExceptionDefinition上调用handled(true)将异常标记为已处理,那么您的消息也将被删除。

最新更新