如何在 SimpleMessageListenerContainer 中注入多个消费者?

How to Inject multiple consumers in SimpleMessageListenerContainer?

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

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

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

  1. 将消费者范围标记为"prototype"和
  2. 在 "SimpleMessageListenerContainer "
  3. 中为同一个 class 注入多个消费者

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

@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?????>>
}

提前致谢。

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

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