Gar*_*ell 4 rabbitmq spring-rabbit spring-amqp
这个问题的答案解释了<rabbit:listener-container/>当侦听器不是线程安全时如何在Spring AMQP中使用原型范围.
另一位用户(在评论中)询问如何仅使用Java配置来配置相同的环境.
通常最好的做法是为侦听器使用无状态bean,但是如果不可能,@Prototype只使用Java Configuration 配置范围侦听器(和多个容器),则可以使用:
@Bean
public SimpleMessageListenerContainer container1() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
container.setQueueNames("test.mismatch");
container.setMessageListener(new MessageListenerAdapter(listener()));
container.setMismatchedQueuesFatal(true);
return container;
}
...
@Bean
public SimpleMessageListenerContainer containerN() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
container.setQueueNames("test.mismatch");
container.setMessageListener(new MessageListenerAdapter(listener()));
container.setMismatchedQueuesFatal(true);
return container;
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public MyNotThreadSafeListener listener() {
return new MyNotThreadSafeListener();
}
Run Code Online (Sandbox Code Playgroud)
请记住,注入的任何依赖项MyNotThreadSafeListener也必须是原型bean.
底线是无状态豆是最好的.
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |