2017-11-21 7 views
0

アグリゲータの前後でAMQP(RabbitMQ)キューの永続性を利用して、MessageStoreにバックアップされていないアグリゲータを使用する場合、Spring Integrationセットアップで永続性を持てるかどうかを知りたいと思います。 これはackの使用を想像しています。アグリゲータは、すべての部分を収集して結果のメッセージを送信する前にメッセージを確認しません。 さらにこれが良いアイデアであるかどうかを知りたいと思います。AMQPを使用してMessageStoreを使用しないSpring統合アグリゲータのメッセージ永続性?

私は新しいキューの作業をしていて、使用するパターンが良いと感じています。

  • 私は1つのキューにメッセージが表示されます。これは、次のような

    私のビジネスロジックがあります。

  • 各メッセージは無関係な2つのWebサービス呼び出し(好ましくは並行して)をもたらす必要があります。
  • これら2つの呼び出しの結果は、元のメッセージの詳細と組み合わされている必要があります。
  • この組み合わせは、キュー上の新しいメッセージとして送信する必要があります。

メッセージは重要なので、紛失してはいけません。

私は、永続的なシステムであるRabbitMQを1つだけ使用し、データベースを追加する必要はありませんでした。

私は具体的な質問を維持しようとしたが、これにアプローチする方法上の任意の他の提案は大歓迎です:)

答えて

1

あなたがやりたい何かが私Scatter-Gather EI Pattern回想します。

したがって、AMQPからのメッセージをScatterGatherエンドポイントに送信し、集約応答を待ちます。それは、デフォルトの確認応答で十分です。

右のscatterChannelは、PublishSubscribeChannelとすることができ、実行者はWebサービスを並行して呼び出すことができます。とにかく、採集プロセスは、リリース戦略に従って返信を待ち、元のAMQPリスナーがメッセージを早急に確認しないようにします。

+0

受信チャネルのプリフェッチは、グループ内の予想されるメッセージ以上でなければなりません。ブローカは、una​​ckされたメッセージをプリフェッチする以外には送信しません。 –

+0

@GaryRussell私はあなたのコメントを正しく理解していますが、複数の元のメッセージ(複数の並列処理を処理しようとしています)のアウトバウンド要求があれば、プリフェッチはそれに応じて拡張する必要がありますか? – cranphin

+0

まさにそうです。コンテナの 'concurrency * prefetch'は、ブローカが許可する未処理のメッセージの数を決定します - それは少し脆い - あなたが間違っている場合、アプリケーションはハングします。私はデザインに熱心ではない。 –

関連する問題