こちら で説明されているように、着信 Java サーブレット Web リクエストが RPC アプローチを使用して RabbitMQ を呼び出すようにしたいと考えています。
ただし、リクエストごとに新しいコールバック キューを作成する上記のリンクの RabbitMQ チュートリアルに従って、リクエスト間でコールバック キューを適切に再利用する方法がわかりません (キュー TTL 機能を使用しても、RabbitMQ は対応できない場合があります)。
通常、サーブレット リクエストごとに 1 ~ 2 回の RPC 呼び出ししかありませんが、明らかに 1 秒あたりのサーブレット リクエスト数は多くなります。
スレッド間でコールバック キューを共有できるとは思わないので、Web ワーカー スレッドごとに少なくとも 1 つ必要です。
私の最初のアイデアは、コールバック キューを ThreadLocal に格納することでしたが、メモリ リークが発生する可能性があります。
私の2番目のアイデアは、それらをセッションに保存することでしたが、それらが適切にシリアル化されるかどうかわからず、現在、セッションはWebサーバー間で複製/共有されていないため、IMHOは良い解決策ではありません.
私のインフラストラクチャは Tomcat / Guice / Stripes Framework です。
最も堅牢でシンプルなソリューションは何ですか?
このアプローチ全体で何かが欠けているため、物事が複雑になりすぎていますか?
注 1 - この質問は、ここで説明されている全体的なビジネス ケースに関連しています- オプション 1 を参照してください。
注 2 - Web コンテキストで RabbitMQ RPC をセットアップする方法に関する一見関連する質問がありますが、ほとんどの場合、RabbitMQ クライアントによって作成されたスレッドの適切なシャットダウンに関係しています。