48.14.2. Orphan Lock 対応の Jdbc IdempotentRepository
org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository の制限の 1 つは、JVM クラッシュまたは非正常なシャットダウンから生じる孤立したロックを処理しないことです。これにより、これが camel-file、camel-ftp などで使用されると、処理されていないファイル/メッセージが発生する可能性があります。孤立したロック処理に対応する必要がある場合は、org.apache.camel.processor.idempotent.jdbc.JdbcOrphanLockAwareIdempotentRepository を使用します。このリポジトリーは、アプリケーションのインスタンスが保持するロックを追跡します。保持されているロックごとに、アプリケーションはキープアライブシグナルをロックリポジトリーに送信し、作成されたAt 列を現在の Timestamp で更新します。アプリケーションインスタンスがロックを取得しようとすると、3 つの可能性があります。
-
ロックエントリーが存在しない場合は、
JdbcMessageIdRepositoryのベース実装を使用してロックが提供されます。 - ロックがすでに存在し、作成されたAt < System.currentTimeMillis ()- lockMaxAgeMillis.この場合、アクティブなインスタンスにロックがあり、ロックを要求する新規インスタンスにロックが提供されないことを前提とします。
- ロックがすでに存在し、作成されたAt > = System.currentTimeMillis ()- lockMaxAgeMillis.この場合、ロックのあるアクティブなインスタンスがなく、要求元のインスタンスにロックが提供されていることを前提としています。理由は、ロックを含む元のインスタンスがまだ実行中の場合は、keepAlive メカニズムを使用して createdAt にタイムスタンプを更新することです。
このリポジトリーには、2 つの追加設定パラメーターがあります。
| パラメーター | 説明 |
|---|---|
| lockMaxAgeMillis | これは、ロックが孤立していると見なされるまでの期間を指します。つまり、currentTimestamp - createdAt >= lockMaxAgeMillis の場合、ロックは孤立します。 |
| lockKeepAliveIntervalMillis | ライブ更新を維持する頻度は、createdAt Timestamp 列に行われます。 |