我与基于MemoryIdempotentRepository的幂等用户一起使用Camel AWS-S3,并尝试使用Camel AWS-S3版本3.14.2读取AWS/S3桶中的所有文件。其目的是将检索到的文件保存在桶中,因此,deleteAfterRead设置为false。在调试我的代码时,我看到连续的轮询总是只检索一个文件,这个文件总是相同的。在第二次轮询之后,该文件被正确地视为重复文件,并被忽略。在我的调试日志中,我看到“使用id忽略重复消息.”为了这份文件。但是,尽管我的AWS/S3桶中有更多的文件要检索,但是在启动下一个轮询的轮询延迟到期之前不会发生任何事情。但是下一次投票只检索相同的已标记的重复文件,等等.
在忽略前一个文件之后,使s3client继续检索桶中的下一个文件所需的内容。从3.9.0开始的所有版本的骆驼都表现出相同的行为。
有没有人遇到过同样的问题,知道如何解决这个问题?
在此之前,非常感谢您。
发布于 2022-03-25 11:28:35
Apache AWS2 S3组件应该根据需要正确地轮询AWS S3桶文件。
只有一个文件被投票应该意味着:
bucketName和fileName,这将解析为一次又一次轮询同一个文件。maxMessagesPerPoll设置为1,同时不删除处理过的消息,这将解析为反复轮询同一个文件。prefix或delimiter配置选项您应该开始检查您的端点配置,以确定这些错误配置选项是否适用。
另一方面,要实现幂等效应,您有两种方法之一:
moveAfterRead,以便将处理过的文件复制到目标桶中,避免它们在下一次迭代中被重新轮询(您需要配置destination桶)。此解决方案将取决于您的需求,并且仅当您负担得起在另一个桶中有文件时才适用,这意味着没有其他组件/服务依赖于同一源桶中的这些文件。IdempotentConsumer,在这种情况下,您可以标记(并保存)处理过的消息https://stackoverflow.com/questions/71612701
复制相似问题