我目前正在开发一个 rabbit-amqp 实现项目,并使用 spring-rabbit 以编程方式设置我所有的队列、绑定和交换。(spring-rabbit-1.3.4 和 spring-framework 版本 3.2.0)
在我看来,javaconfiguration 类或基于 xml 的配置中的声明都是静态的。我知道如何为队列、交换或绑定设置更动态的值(例如名称),如下所示:
@Configuration
public class serverConfiguration {
private String queueName;
...
@Bean
public Queue buildQueue() {
Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
buildRabbitAdmin().declareQueue(queue);
return queue;
}
...
}
但我想知道是否可以创建未定义数量的 Queue 实例并将它们注册为 bean,就像工厂注册所有实例一样。
我不太熟悉 Spring @Bean 注释及其限制,但我尝试过
@Configuration
public class serverConfiguration {
private String queueName;
...
@Bean
@Scope("prototype")
public Queue buildQueue() {
Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
buildRabbitAdmin().declareQueue(queue);
return queue;
}
...
}
为了查看 Queue 的多个 bean 实例是否已注册,我调用:
Map<String, Queue> queueBeans = ((ListableBeanFactory) applicationContext).getBeansOfType(Queue.class);
但这只会返回 1 个映射:
name of the method := the last created instance.
是否可以在运行时将 bean 动态添加到 SpringApplicationContext?