3
this question的答案解释了如何在侦听器不是线程安全的情况下在Spring AMQP中使用<rabbit:listener-container/>
的原型范围。如何使用非线程安全的MessageListener实现并发性
另一位用户询问(在评论中)如何仅使用Java配置来配置相同的环境。
this question的答案解释了如何在侦听器不是线程安全的情况下在Spring AMQP中使用<rabbit:listener-container/>
的原型范围。如何使用非线程安全的MessageListener实现并发性
另一位用户询问(在评论中)如何仅使用Java配置来配置相同的环境。
它仅使用Java的配置是使用无状态bean听众通常最好的做法,但如果这是不可能的,配置@Prototype
范围监听器(和多个集装箱),你可以使用:
@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();
}
请记住,任何依赖注入MyNotThreadSafeListener
也必须是原型豆。
底线是无状态豆是最好的。
非常感谢Gary。 – Fab