当deleteAfterRead为false时,幂等Camel AWS 2-S3使用者不会从存储桶检索所有文件

gijlo24d  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(182)

我正在使用CamelAWS 2-S3和基于MemoryIdempotentRepository的幂等消费者,并尝试使用CamelAWS 2-S3版本3.14.2从AWS/S3存储桶中读取所有文件。目的是将检索到的文件保存在存储桶中,deleteAfterRead被设置为false。当调试我的代码时,我看到连续的轮询总是只检索一个文件,而且总是相同的。在第二次轮询后,这个文件被正确地认为是重复的,并被忽略。在我的调试日志中,我看到这个文件的“忽略具有id的重复消息...”。然而,尽管我的AWS/S3桶中有更多的文件要检索,直到发起下一个轮询的轮询延迟期满为止。但随后下一次轮询只检索相同的已经标记为重复的文件,依此类推...
要让s3 client在忽略前一个文件后继续检索桶中的下一个文件,需要什么?Camel从3.9.0开始的所有版本都显示了相同的行为。
有没有人遇到过同样的问题,并且知道如何解决这个问题?
提前感谢。

ovfsdjhp

ovfsdjhp1#

Apache Camel AWS2 S3 Component应能根据需要正常轮询 AWS S3 存储桶文件。
仅轮询一个文件意味着:

  • 在配置使用者时指定了bucketNamefileName,这将解析为反复轮询同一文件
  • maxMessagesPerPoll设置为1,同时不删除已处理的消息,这也将解决反复轮询同一文件的问题
  • 设定与单一档案相符的prefixdelimiter组态选项

您应该开始检查您的端点配置,以查看是否存在这些错误配置选项中的任何一个。
另一方面,要实现幂等性,有两种方法:

  • 将使用方终结点配置为moveAfterRead,以便将已处理的文件复制到目标存储桶,从而避免在下一次迭代中重新轮询这些文件(需要配置destination存储桶)。此解决方案将取决于您的要求,并且仅当您能够承受另一个存储桶中的文件时才适用,这意味着没有其他组件/服务依赖于同一源存储桶中的这些文件
  • 配置由您选择的存储库支持的IdempotentConsumer,在这种情况下,您可以标记(和保存)已处理的消息

相关问题