【问题标题】:How to Inject multiple consumers in SimpleMessageListenerContainer?如何在 SimpleMessageListenerContainer 中注入多个消费者?
【发布时间】:2018-03-28 20:40:30
【问题描述】:

我正在编写一个 Spring Boot 应用程序,它使用来自 RabbitMQ 的消息并对其进行处理。由于发布者正在高速发布消息,我希望我的消费者也能够高速处理它们。

我的消费者代码不是线程安全的。

以下是一种可能的方式,我想到了实现:

  1. 将消费者范围标记为“原型”并
  2. 在“SimpleMessageListenerContainer”中为同一个类注入多个消费者

如何使用以下代码实现此目的?

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames("MY_MESSAGE_QUEUE");
    container.setConcurrency("10");
    container.setMessageListener(listenerAdapter);
    <<How can I set multiple MessageListener here?????>>
}

提前致谢。

【问题讨论】:

标签: spring rabbitmq spring-amqp


【解决方案1】:

每个容器只能有一个监听器实例。

如果您的侦听器不是线程安全的,您需要为每个实例使用单独的容器 bean,使用 concurrentConsumers=1(默认值)。

【讨论】:

  • 要获得 10 个具有非线程安全原型侦听器的消费者,您只需要 10 个容器 @Beans - container1container2、...container10。不清楚你为什么需要一个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2015-09-03
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多