242.10. リクエスト/リプライによる単一接続での同時メッセージの多重化
netty プロデューサーを介した要求/応答メッセージングに Netty を使用する場合、デフォルトでは、各メッセージは非共有接続 (プール) を介して送信されます。これにより、返信が自動的に正しいリクエストスレッドにマップされ、Camel でさらにルーティングできるようになります。言い換えると、リクエスト/リプライメッセージ間の相関関係は、リクエストの送信に使用されたのと同じ接続でリプライが返されるため、すぐに使用できます。この接続は他のユーザーと共有されません。応答が戻ってくると、接続は接続プールに戻され、他のユーザーが再利用できるようになります。
ただし、単一の共有接続で同時要求/応答を多重化したい場合は、producerPoolEnabled=false
を設定して接続プールをオフにする必要があります。これは、返信が順不同で戻ってきた場合、インタリーブされた応答に潜在的な問題があることを意味します。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager
を相関マネージャーとして実装し、correlationManager=#myManager
オプションを介して設定する必要があります。
カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport
を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。
camel-example-netty-custom-correlation
ディレクトリーの下の examples ディレクトリーに、Apache Camel ソースコードの例があります。