Apache Camel:完成汇总交换后的完整交换

时间:2016-11-30 14:37:56

标签: apache-camel

在我的Apache Camel应用程序中,我有一个非常简单的路径:

from("aws-sqs://...")
    .aggregate(constant(true), new AggregationStrategy())
    .completionSize(100)
    .to("SEND_AGGREGATE_VIA_HTTP");

也就是说,它接收来自AWS SQS的消息,将它们分批分组,然后通过HTTP将它们发送到某个地方。

在进入聚合阶段时,与SQS的消息交换成功完成,此时SqsConsumer将其从队列中删除。

问题是聚合交换可能会发生某些事情(可能会发送错误),并且消息将丢失。我真的希望这些原始交换成功完成(消息从队列中删除)只有当他们所在的聚合交换也成功完成时(一批消息被传递)。有没有办法做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将deleteAfterRead设置为false并在将消息发送到HTTP端点后手动删除消息;您可以使用bean或处理器,并通过AWS SDK库发送正确的SQS删除请求。这是一种解决方法,但是我没有看到更好的方法。