以下は、私のアプリケーションで使用している遅延コードです。出力チャネルcheckMessageInProgressは、メッセージを処理または遅延する必要があるかどうかをチェックするデータベースストアドプロシージャ呼び出しです。 メッセージを再度遅延させる必要がある場合は、再試行回数が増えます。 3つの遅延後、カスタムアプリケーション例外が発生します。遅延メッセージ用にjdbcメッセージストアを使用しています。メッセージが3回遅延し、例外が発生した場合、メッセージはデータベーステーブルから削除されず、サーバーは再起動時にこれらのメッセージを選択します。遅延が3回発生した場合にメッセージがテーブルから削除されるようにする方法Spring統合遅延 - Jdbcメッセージストア:メッセージが削除されない
<int:chain input-channel="delayerChannel"
output-channel="checkMessageInProgress">
<int:header-enricher>
<!-- Exception/ERROR handling for flows originating from Delayer -->
<int:header name="errorChannel" value="exceptionChannel"
overwrite="true" />
<int:header name="retryCount" overwrite="true" type="int"
expression="headers['retryCount'] == null ? 0 : headers['retryCount'] + 1" />
</int:header-enricher>
<!-- If retryCount maxed out -discard message and log it in error table -->
<int:filter expression="(headers['retryCount'] lt 3)"
discard-channel="raiseExceptionChannel">
</int:filter>
<!-- Configurable delay - fetch from property file -->
<int:delayer id="Delayer" default-delay="${timeout}"
message-store="mymessageStore">
<!-- Transaction management for flows originating from the Delayer -->
<int:transactional transactionmanager="myAppTransactionManager"/>
</int:delayer>
</int:chain>