JMS を使用して相互に通信する必要があるアプリケーションがいくつかあります。それらをサーバーとクライアントとして説明します。次の手順が実行されます。
- クライアントは、メッセージ ID を記憶しているサーバーに要求を送信します。
- サーバーは、指定された返信先アドレスに返信を送信します (また、要求のメッセージ ID に基づいて相関 ID を設定します)。
- クライアントは、相関 ID を使用して要求への応答を一致させました。
この2つだけなら大丈夫です。
(コンテンツ ベースの) ルーターを導入すると、次の手順が実行されます。
- クライアントは、メッセージ ID を記憶しているルーターに要求を送信します。
- ルーターはメッセージの内容をチェックし、メッセージをサーバーに転送します。(転送時はメッセージIDが変わります。)
- サーバーは、指定された返信先アドレスに返信を送信します (また、要求のメッセージ ID に基づいて相関 ID を設定します)。
- ルーターがメッセージ ID を変更したため、クライアントは要求に対する応答と一致しません。
JMS仕様に準拠しながら、ルーターを正しく実装する方法を一生理解することはできません。
私は次のことを考え出しましたが、これがベストプラクティスであるかどうかはわかりません:
- クライアントは、メッセージ ID を記憶しているルーターに要求を送信します。
- Router はメッセージの内容をチェックします。
- ルーターは元のメッセージを記憶し、新しいメッセージをサーバーに送信します (返信先アドレスをルーターの返信チャネルに設定します)。
- サーバーは、指定された返信先アドレスに返信を送信します (また、新しい要求のメッセージ ID に基づいて相関 ID を設定します)。
- Router は、Router が行った要求に対する応答を照合します。
- ルーターは、サーバーの応答に基づいて応答を作成し、相関 ID を元のメッセージのメッセージ ID に設定します。
- クライアントは、元の要求に対するルーターの応答を照合します。
JMS ルーターはどのように機能する必要がありますか? / 私の設計は正しいですか?