我在群集环境中使用camel并希望在我的文件使用者端点上使用readlock,因此只有一个服务器尝试处理每个文件。 唯一的集群安全readlock是幂等的readlock,但是这需要在文件uri上设置idempotentRepository。
我在路由中使用幂等使用者,将任何重复文件移动到错误文件夹并将错误记录到特定文件。这使用指定的JDBCMessageIdRepository来存储幂等密钥。
有没有办法使用idempotent使用幂等读取锁定的重复处理逻辑?或者一种方法来设置文件组件中的idempotentRepository不跳过重复项,以便它们被路由中的幂等消费者选中?
答案 0 :(得分:1)
如果您使用相同的幂等存储库密钥进行锁定和消费,那么您将无法尝试两次处理同一文件 - 在读取锁定检查后将进行幂等消费者检查,因此您的文件将在之前被跳过消费者会检查它是否存在。此外,我认为您可能会遇到消费者的问题并且读取锁定本身,因为消费者可能会将您的文件报告为已存在,因为读取锁定会在消费者进行检查之前在DB中插入行。
我能想到的最快的解决方案是为幂等使用者和读锁使用不同的密钥 - 这样它们之间就不会有任何冲突 - 并且通过设置{{1来使读锁定删除提交时的密钥到readLockRemoveOnCommit
。这样,读锁定将不允许并发处理文件,但会使用幂等使用者密钥来检查文件是否已经处理过。