私は最近、Spring と spring-amqp の学習を始めたので、この質問は非常に基本的なものに見えるかもしれません。
異なるホスト上にあり、異なる QueueName、RoutingKey、vhost、user、password を持つ複数のキューがあります。これらのキューのパブリッシング ロジックを作成していますが、キューごとに 1 つの構成クラスを使用する必要があるのか、それとも XML で実行できるのかを判断できませんでした。
キューに関するすべての情報 (ホスト、仮想ホスト、ユーザー名など) を持つクラスを作成する方法は、この例で説明されているように正常に機能しています。@Configuration クラスを作成し、そのキューのすべての Bean を定義しました。しかし、私はする必要があります
ApplicationContext context = new AnnotationConfigApplicationContext(MyQueueConfiguration.class);
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
amqpTemplate.convertAndSend("Hello World!!");
だから私の要件は次のとおりです。
- アプリケーションの起動時にインスタンス化する必要がある多くのキューがあるため、Tomcat が起動したら、キュー/ウサギ クラスタへの接続/チャネルを確立する必要があります。
- 次に、アプリケーションに POST リクエストが来るとすぐに、POST パラメータに基づいてキューの 1 つにメッセージを発行する必要があります。
したがって、キューごとに常に次のことを行う必要があります。
ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);
または、すべてのキュー構成クラスをSpringでロードし、次のようなオブジェクトを使用する方法はありますか:
// calling code when I get a POST request
MyQueueConfigurationClass.publishMessage(payload, queueName);
// The implementation code
public boolean publishMessage(String payload, String queueName){
// Get Bean for the **queueName** somehow
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
// Use the bean to send the message
amqpTemplate.convertAndSend(payload);
}
- では、毎回実行せずに正確なキューの amqpTemplate を取得するにはどうすればよい
new AnnotationConfigApplicationContext()
でしょうか? - サービスにリクエストが来るたびに新しい AnnotationConfigApplicationContext を実行することの害は何ですか? [リクエストごとに新しいオブジェクトを作成するのは良い考えではないと推測しています]