我正在尝试通过RabbitMQ分发包含许多任务的消息:
Producer --> RabbitMQ Exchange --> 10 Consumers
例如为: 用户向包含1000个任务的交换机发送消息。交换需要将任务均匀地分配给队列最短的消费者。
由于生产者不了解RabbitMQ中使用的排队机制,因此交换需要一些自定义逻辑,用于将订单拆分为任务并将其分发到消费者队列。
这是怎么做到的? (我对生产者和消费者都使用Python / Pika。)
答案 0 :(得分:2)
如果您使用单个队列,并且有多个使用者连接到该队列并利用Consumer Prefetch (QoS),那么听起来会更简单。这样,您可以向该队列发送1000条消息,并让可用的消费者接收消息。
Producer --> RabbitMQ Exchange --> RabbitMQ Queue --> 10 Consumers
Consumer Prefetch(QoS)基本上只是意味着您可以设置消费者预取的消息数。例如,如果将此值设置为1,则pika一次只能获取并处理一条消息,从而使其他消费者有机会消费和处理其他999条消息。