gpt4 book ai didi

rabbitmq - 如何使用非线程安全的 MessageListener 实现并发

转载 作者:行者123 更新时间:2023-12-04 23:18:09 26 4
gpt4 key购买 nike

this question的答案|解释如何将原型(prototype)范围与 <rabbit:listener-container/> 一起使用当监听器不是线程安全的时,在 Spring AMQP 中。

另一位用户询问(在评论中)如何仅使用 Java 配置来配置相同的环境。

最佳答案

对监听器使用无状态 bean 通常是最佳实践,但如果不可能,请配置 @Prototype仅使用 Java 配置的范围监听器(和多个容器),您可以使用:

@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();
}

请记住,注入(inject) MyNotThreadSafeListener 的任何依赖项也必须是原型(prototype) bean。

底线是无状态 bean 是最好的。

关于rabbitmq - 如何使用非线程安全的 MessageListener 实现并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34926012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com