46.14.2. orphan Lock aware Jdbc IdempotentRepository
org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository
的限制之一是它不处理 JVM 崩溃或非正常关闭导致的孤立锁定。如果此实施与 camel-file 和 camel-ftp 等使用,这可能会导致无处理的文件/消息。如果您需要 address orphan locks 处理,则使用 org.apache.camel.processor.idempotent.jdbc.JdbOcrphanLAwareIdempotentRepository
。此存储库跟踪应用程序实例所持有的锁定。对于每个锁定,应用程序会将实时信号发送到锁定存储库,从而使用当前 Timestamp 更新 createdAt 列。当应用程序实例在尝试获取锁定时,存在三个可能:
-
锁定条目不存在,然后使用
JdbcMessageIdRepository
的基本实施来提供锁定。 - lock 已存在且 createdAt < System.currentTimeMillis()- lockMaxAgeMillis.在这种情况下,假设活动实例具有锁定,并且没有向请求锁定的新实例提供锁定
- lock already exists, createdAt > = System.currentTimeMillis()- lockMaxAgeMillis.在这种情况下,假设没有活跃的实例锁定,且向请求实例提供锁定。后面的原因是,如果原始实例具有锁定,如果仍正在运行,它会使用其 keepAlive 机制更新了 createdAt 上的 Timestamp。
这个仓库有两个额外的配置参数
参数 | 描述 |
---|---|
lockMaxAgeMillis | 这会引用锁定在多久时间内被视为孤立 i.e。如果 currentTimestamp - createdAt >= lockMaxAgeMillis,则锁定是孤立的。 |
lockKeepAliveIntervalMillis | 对 createdAt Timestamp 列保存实时更新的频率。 |