2017-09-05 2 views
1

私は次のような設定をしています。複数のデバイスがバックエンドにHTTP経由でデータを送信します。私はデータを処理し、それをタイムスタンプ順に必要とする別の外部パートナーに送る必要があります。春の統合 - ステップ間のロックの共有

  1. は、彼らの前でロードバランサと、実行中のn個の受信機のインスタンスがありますので、彼らはpotientiallyすべてのデバイスからデータを取得:だから私は、次のアーキテクチャを思い付きました。これらのインスタンスは、情報を追加して各着信データを処理し、データをRedis Sorted Set(各デバイスに1つあります)に入れます。その後、彼らはセット内のいくつのデータ項目について(Redis経由で)メッセージを送信します。

  2. データを外部パートナーに送信するタスクがm個ある処理インスタンスがあります。受信者によって送信されたメッセージを聞き取り、セット内のエントリ数があるしきい値より大きい場合、キューからデータを取得し、他の情報を追加して外部パートナーに送信します。

問題はタイムスタンプの注文要件です。私はn個とm個のインスタンスを持っていて、それぞれが複数のスレッドを実行しています。受信者からすべてのメッセージを受け取った処理インスタンスでは、セットからデータを取得し、メッセージに関連付けられたキュー(およびそれぞれのデバイス)に対応する共有レディスロック内で外部パートナーに送信することを考えました)。しかし、現在のところ、処理フローの一部である複数のSpring Integrationステップがあります。キューからデータを取得して送信用に変換し、HTTP送信チャネル経由で送信します。私は最初のステップ(キューからデータを取得)で得られたロックを使用し、最後のステップで(アウトバウンド・チャネルを介して送信した後に)解放することを考えました。エラーの場合、エラー処理ステップでロックが解除されます。

これに代わる方法はありますか?私は残りのフローを通してメッセージヘッダーの一部としてロックを送信し、最後に解放することを考えていました。

答えて

0

注文については、PriorityChannelまたはResequencerを使用して、外部パートナーに送信する前にレコードの順序を変更することを検討する必要があります。 これらは共用MessageStoreで設定できます。

関連する問題