Mav*_*k94 5 java spring rabbitmq spring-rabbitmq
我有一个使用动态消费者的应用程序.我正在使用带有RabbitMQ的Spring Framework.
我有像concurrentConsumers
和的参数maxConcurrentConsumers
.
这是一个例子:
@Bean
public SimpleMessageListenerContainer container(ConnectionFactory connection) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setMaxConcurrentConsumers(8);
container.setConcurrentConsumers(1);
return container;
}
Run Code Online (Sandbox Code Playgroud)
我可以在应用程序运行时更改值吗?例如,如果我想要5 maxConcurrentConsumers
而不是8,我可以在应用程序运行时更改终端上的值或类似的值吗?
您的 bean 是单例,并且应该是无状态的(至少是不可变的或有效无状态的)以确保线程安全性和正确性。
通常,您应该对所有有状态 Bean 使用原型作用域,对无状态 Bean 使用单例作用域。
有时,创建 bean 的成本相当高,因此更合理的做法是构造一个实例一次,然后保证对该对象所做的所有可能的更改都将以安全且正确的方式渗透到其所有使用者。
我建议构建一个简单的事件驱动机制。
有
MessageListenerContainerEvent extends ApplicationEvent
代表对 bean 所做的更改MessageListenerContainer
;MessageListenerContainerChanger implements ApplicationListener<MessageListenerContainerEvent>
谁是修改 bean 状态的唯一侦听器,并保证一切正常工作;@ShellMethod
.它可能看起来太复杂,你总是可以将其简化为
// somewhere in your code
synchronized(bean) {
bean.setConcurrentConsumers(10);
}
Run Code Online (Sandbox Code Playgroud)
但请记住此片段传播的正确性。
归档时间: |
|
查看次数: |
105 次 |
最近记录: |