在我的Apache Camel应用程序中,我有一个非常简单的路径:
from("aws-sqs://...")
.aggregate(constant(true), new AggregationStrategy())
.completionSize(100)
.to("SEND_AGGREGATE_VIA_HTTP");
也就是说,它接收来自AWS SQS的消息,将它们分批分组,然后通过HTTP将它们发送到某个地方。
在进入聚合阶段时,与SQS的消息交换成功完成,此时SqsConsumer
将其从队列中删除。
问题是聚合交换可能会发生某些事情(可能会发送错误),并且消息将丢失。我真的希望这些原始交换成功完成(消息从队列中删除)只有当他们所在的聚合交换也成功完成时(一批消息被传递)。有没有办法做到这一点?
谢谢。
答案 0 :(得分:1)
您可以将deleteAfterRead
设置为false
并在将消息发送到HTTP端点后手动删除消息;您可以使用bean或处理器,并通过AWS SDK库发送正确的SQS删除请求。这是一种解决方法,但是我没有看到更好的方法。