私は、マルチスレッド環境(私は複数のコンシューマーを持っている>複数のウサギリスナーコンテナ)でspring amqpのアノテーションベースのアプローチを使用しています。マルチスレッド環境では、受信するrabbitListenerコンポーネント内にスレッドに依存するデータをどこに格納する必要がありますか?
@RabbitListener(queues = "tasks")
public void receiveMessage(@Payload Task task) {
// usage of httpClient here with its own httpContext (would be fine)
// this method gets called from different listenerContainers/threads
}
注釈付きのreceiveMessage()メソッドを含む私のコンポーネントは、apache httpクライアントで何らかのhttp呼び出しを行う必要があります。私は同時に複数のコンシューマを扱っているので、このメソッドは別のスレッドから呼び出され、Apacheのhttpクライアントのドキュメントによれば、各スレッドがスレッドセーフであるためにはhttpContextを作成する必要があります。すべてのスレッドが同じコンポーネントメソッドを呼び出すので、私はコンポーネントにhttpContextを置くことができません。
httpClientContextを置くことができる各リスナーコンテナのリスナコンテナコンテキストのようなものがありますか?あるいは、誰かがこれを簡単に解決する方法を知っていますか?私はThreadLocalまたはhttpContextsのための中央レジストリについて考えましたが、これがより簡単なのであれば問題ありません。