最終メッセージへの応答が前のメッセージに基づく必要があるminaサービスを実装しようとしています。各メッセージ(ヘッダー(1)、データ(n)、終了(1))は応答を受信する必要がありますが、「終了」メッセージへの応答は「ヘッダー」と受信した「データ」メッセージに基づいている必要があります。 「終了」メッセージとして。現在、特定の相関IDの「ヘッダー」および「終了」メッセージが見つかると完了するアグリゲーターにメッセージをルーティングしています。残念ながら、応答はメッセージがアグリゲーターに送信される前に(または同時に?)送信されるため、正しい応答を作成するために必要なすべてのデータを含む集約されたメッセージにアクセスできません。応答を構築します。
蓄積されたデータを手動で保存してアクセスせずに(つまり、ラクダのアグリゲーターを再実装せずに)これを行う方法はありますか?
編集:
ルートは次のようなものです。
<camelContext>
<route>
<from uri="mina:..."/>
<process ref="messageProcessor"/>
<aggregate>
<process ref="completeMessageProcessor"/>
</aggregate>
</route>
</camelContext>
わかりやすくするために、いくつかのタグと属性(、、など)を省略しましたcorrelationExpression
。completionPredicate
strategyRef
メッセージは適切に集約されており、「完了」したとき(つまり、集約されたとき)に適切に処理されていました。mina
ただし、エンドポイントを介してクライアントに返送される応答は、によって生成されたものであり、によって生成されたmessageProcessor
ものではありませんcompleteMessageProcessor
。
たとえば(そして、はい、それはかなり不自然な例ですが、私に耐えてください)、プロトコルが、クライアントが送信することを期待するデータメッセージの総数を含むヘッダーメッセージを送信することを含むとしましょう。次に、いくつかのデータメッセージを送信しますが、送信する予定のデータメッセージとは数が異なる場合があります。最後に、フッターまたは終了メッセージを送信します。その後、サーバーは、予想されるメッセージ数と実際のメッセージ数の差で応答する必要があります。messageProcessor
記述されたルートでは、個々のメッセージのみを処理するによってメッセージの数がわからないため、これは不可能です。集約されたメッセージ(ヘッダー、すべてのcompleteMessageProcessor
データ、および終了で構成される)を持つmina
この番号はわかっていますが、その時点で生成された応答はエンドポイントに伝播されません。
サーバーは個々のメッセージに応答する必要があるため、メッセージの解析を変更して、作成されたメッセージ全体が受信された場合にのみメッセージを生成することはできません。