私は次のような設定をしています。複数のデバイスがバックエンドにHTTP経由でデータを送信します。私はデータを処理し、それをタイムスタンプ順に必要とする別の外部パートナーに送る必要があります。春の統合 - ステップ間のロックの共有
は、彼らの前でロードバランサと、実行中のn個の受信機のインスタンスがありますので、彼らはpotientiallyすべてのデバイスからデータを取得:だから私は、次のアーキテクチャを思い付きました。これらのインスタンスは、情報を追加して各着信データを処理し、データをRedis Sorted Set(各デバイスに1つあります)に入れます。その後、彼らはセット内のいくつのデータ項目について(Redis経由で)メッセージを送信します。
データを外部パートナーに送信するタスクがm個ある処理インスタンスがあります。受信者によって送信されたメッセージを聞き取り、セット内のエントリ数があるしきい値より大きい場合、キューからデータを取得し、他の情報を追加して外部パートナーに送信します。
問題はタイムスタンプの注文要件です。私はn個とm個のインスタンスを持っていて、それぞれが複数のスレッドを実行しています。受信者からすべてのメッセージを受け取った処理インスタンスでは、セットからデータを取得し、メッセージに関連付けられたキュー(およびそれぞれのデバイス)に対応する共有レディスロック内で外部パートナーに送信することを考えました)。しかし、現在のところ、処理フローの一部である複数のSpring Integrationステップがあります。キューからデータを取得して送信用に変換し、HTTP送信チャネル経由で送信します。私は最初のステップ(キューからデータを取得)で得られたロックを使用し、最後のステップで(アウトバウンド・チャネルを介して送信した後に)解放することを考えました。エラーの場合、エラー処理ステップでロックが解除されます。
これに代わる方法はありますか?私は残りのフローを通してメッセージヘッダーの一部としてロックを送信し、最後に解放することを考えていました。