我最近开始学习 Spring 和 spring-amqp,所以这个问题可能看起来很基础,所以请原谅。
我有多个队列,它们位于不同的主机上,并且具有不同的 QueueName、RoutingKey、vhost、用户、密码。我正在为这些队列编写发布逻辑,但无法决定是否应该为每个队列设置一个配置类,或者是否可以在 XML 中完成。
创建一个类以获取有关队列的所有信息(主机、虚拟主机、用户名等)的方法工作正常,如本示例中所述。我创建了一个 @Configuration 类并为该队列定义了所有 bean。但是我需要做
ApplicationContext context = new AnnotationConfigApplicationContext(MyQueueConfiguration.class);
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
amqpTemplate.convertAndSend("Hello World!!");
所以我的要求是:
- 由于我有许多队列需要在应用程序启动时实例化,因此一旦 tomcat 启动到队列/兔子集群的连接/通道,就应该建立。
- 然后,一旦我的应用程序收到 POST 请求,我需要根据 POST 参数将消息发布到其中一个队列。
所以对于每个队列我总是需要做:
ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);
或者有没有办法让 Spring 加载我所有的 Queue 配置类并使用如下对象:
// 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()
每次都做呢? - 每次请求到达我的服务时执行 new AnnotationConfigApplicationContext 有什么害处?[我猜为每个请求创建一个新对象不是一个好主意]