RabbitMQ 使用多个消费者序列化队列中的消息

2 投票
2 回答
1073 浏览
提问于 2025-04-15 22:30

我遇到了一个问题,我设置了一个共享模式的队列,并且有多个消费者绑定到这个队列上。问题是,似乎RabbitMQ在处理消息时是串行的,也就是说,只有一个消费者可以同时运行。我希望能够并行处理,但我不知道该怎么做。

每个消费者都是在自己的进程中运行的。队列里有很多消息。我正在使用py-amqplib来和RabbitMQ进行交互。

有什么想法吗?

2 个回答

0

根据参考资料,推荐的AMQP模型是每个连接的消费者都有一个队列。你应该创建一个“直接”交换,并确定一个路由键,所有消费者都会监听这个路由键。然后,每个连接的消费者应该创建一个独占的、私有的、非持久的队列,并使用 queue_bind() 将他们的队列订阅到与交换上的公共路由键匹配的消息。通过这种安排,我的工作者可以并行操作,而不是一个接一个地处理任务!

0

关于预取(QOS)呢?在小队列中,我通过声明队列、获取当前可用消息的数量、连接消费者、消费消息,然后在消息消费完后关闭队列,来给人一种并行处理的感觉。关闭通道而不确认消息,这样会让消息变得可以被其他消费者使用。如果你能快速地轮询队列,就可以实现一种类似并行的解决方案。

撰写回答