51.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 を使用してください。このリポジトリーは、アプリケーションのインスタンスが保持するロックを追跡します。保持されているロックごとに、アプリケーションはキープアライブシグナルをロックリポジトリーに送信し、その結果、createdAt 列が現在のタイムスタンプで更新されます。アプリケーションインスタンスがロックを取得しようとする場合、次の 3 つの可能性があります。
-
ロックエントリーが存在しない場合、ロックは
JdbcMessageIdRepositoryの基本実装を使用して提供されます。 - ロックはすでに存在し、createdAt < System.currentTimeMillis () - lockMaxAgeMillis.この場合、アクティブなインスタンスにロックがあり、ロックを要求している新しいインスタンスにロックが提供されていないと想定されます。
- ロックはすでに存在し、createdAt > = System.currentTimeMillis () - lockMaxAgeMillis.この場合、ロックを持つアクティブなインスタンスは存在しないと想定され、ロックは要求側インスタンスに提供されます。背後にある理由は、ロックを持っていた元のインスタンスがまだ実行されていた場合、その keepAlive メカニズムを使用して createdAt のタイムスタンプを更新したためです。
このリポジトリーには、2 つの追加の設定パラメーターがあります。
| パラメーター | 説明 |
|---|---|
| lockMaxAgeMillis | これは、ロックが孤立したと見なされるまでの期間を指します。つまり、currentTimestamp - createdAt >= lockMaxAgeMillis の場合、ロックは孤立しています。 |
| lockKeepAliveIntervalMillis | createdAt Timestamp 列に対してキープアライブ更新が行われる頻度。 |