rabbitmq 单个活动使用者(SAC)-使用者线程仅从单个队列中使用

um6iljoc  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(419)

我尝试在绑定到一致散列交换的队列中使用单个活动消费者(SAC),该交换有4个队列。这是为了根据路由关键字分发消息,并在每个队列中进行有序处理。
在创建Spring SimpleMessageListenerContainer 时,已在TaskExecutor中设置了一个具有4个线程的Executor线程池,假设每个队列有一个消费者线程。
simpleContainer.setTaskExecutor(Executors.newFixedThreadPool(4));
测试时,只有一个线程从所有4个队列中使用消息,很少有两个线程从4个队列中使用消息。这就像一个使用者从多个队列中使用消息一样。
我需要的是让一个消费者线程一次只从一个队列消费,并启用SAC。在这种情况下,我希望线程池中的4个线程每个都从一个队列消费。有没有办法实现这一点?

g9icjywg

g9icjywg1#

如果您将并发性增加到4,您将得到4个消费者,每个消费者从所有4个队列中消费;但SAC意味着实际上只有其中一个队列会从每个队列中使用。
但是,不能保证每个队列都有一个队列。
或者,您可以使用4个单独的容器,每个队列一个,concurrency=1。
或者,DirectMessageListenerContainer在每个队列中使用1个使用者(默认情况下)。

相关问题