1 つのエンドポイントが別のエンドポイントにメッセージを送信できるメッセージ チャネルがあります。ここで、メッセージがチャネルに到着するたびに、内部ビジネス サービスを呼び出したいと考えています。サービスが、チャネルを通過するメッセージの数をカウントするとします。ただし、サービス メソッドが戻るまでメッセージを通過させたくないのです。
これを実現できるのは、どのような種類のチャネルとエンドポイントの構成ですか?
注意すべき点がいくつかあります。
- 受信側の定期的なポーラーは、ポーラーがチャネルへのメッセージの到着を認識しておらず、サービス メソッドがいつ戻るかを認識していないため、要件を満たしていません。
- サービス メソッドは、メッセージの内容には関心がありません。
メッセージが到着
したらすぐに(引数なしで)呼び出す必要があります。
どちらも何も返しません。これが、フィルターの使用が理想的なソリューションではない理由です (フィルターは単に受信メッセージを転送し、その間にサービス メソッドを呼び出します)。
編集:サービス メソッドで発生する可能性があることの 1 つは、例外がスローされる可能性があることです。このようなシナリオでは、メッセージを手放すべきではなく、何か他のことを行う必要があります。ただし、例外の理由は、ペイロードで何もしないため、メッセージ ペイロードとは関係ありません。たとえば、メッセージカウンターをインクリメントするだけです。そのため、メッセージ自体を (理想的には) サービス メソッドに送信するべきではなく、適切にトリガーする必要があるだけであり、サービス メソッドが正常に返されたら、チャネルはメッセージを最終エンドポイントにディスパッチできるようにする必要があると述べました。(サービスメソッドが例外をスローする可能性があるのではなく、代わりにブール値を返すことを検討してください。つまり、渡された場合はtrue、そうでない場合はfalseです)