1

外部システムからの大量のメッセージを非同期に処理する必要があるというシナリオがあります。現在の設計では、5 分ごとにジョブを起動して外部システムからメッセージを取得し、未加工のメッセージを保持してから、メッセージ ID を ExecutorChannel に送信します。消費者 (潜在的に多く) は、チャネルから消費できます。

私たちが直面している問題は、メッセージがキューに入っている間にシステム クラッシュに対処する方法です。どういうわけか、ジョブが起動するたびに、DB を調べて、まだキューにない生のメッセージがあるかどうかを調べる必要があります。

最も簡単な方法は、現在のキュー サイズを照会し、キュー内に msg よりも raw msg が多いかどうかを確認することです。だから私が持っている質問は: ExecutorChannel がキューのサイズを見つけるための API はありますか? または他の提案はありますか?

Thx ジェイソン

4

1 に答える 1

1

Spring Integration 自体は ExecutorChannel 内にキューを維持しません。メッセージは、基礎となる Executor によって実行されます。

チャネル専用の Spring ThreadPoolTask​​Executor を使用している場合、チャネルの基礎となる ThreadPoolTask​​Executor の ThreadPoolExecutor にドリルダウンし、その BlockingQueue (getQueue()) へのハンドルを取得して、そのカウントを取得できます。

ただし、アクティブなタスク数も追加する必要があります。

ただし、 ThreadPoolExecutor にはキューに入れられたアクティブなタスクの数を取得するアトミック メソッドがないため、合計数は概算になります。

于 2012-05-18T15:08:43.050 に答える