Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RabbitMQ:包含许多任务的消息的调度程序_Python_Rabbitmq_Pika - Fatal编程技术网

Python RabbitMQ:包含许多任务的消息的调度程序

Python RabbitMQ:包含许多任务的消息的调度程序,python,rabbitmq,pika,Python,Rabbitmq,Pika,我正试图通过RabbitMQ分发一条包含许多任务的消息: Producer --> RabbitMQ Exchange --> 10 Consumers 例如: 用户向exchange发送包含1000个任务的消息。exchange需要将任务平均分配给队列最短的使用者 由于生产者不知道RabbitMQ中使用的排队机制,因此exchange需要一些自定义逻辑来将订单拆分为任务并将其分发给使用者队列 这是怎么做到的?(我在生产者和消费者身上都使用Python/Pika。)如果使用一个队列

我正试图通过RabbitMQ分发一条包含许多任务的消息:

Producer --> RabbitMQ Exchange --> 10 Consumers
例如: 用户向exchange发送包含1000个任务的消息。exchange需要将任务平均分配给队列最短的使用者

由于生产者不知道RabbitMQ中使用的排队机制,因此exchange需要一些自定义逻辑来将订单拆分为任务并将其分发给使用者队列


这是怎么做到的?(我在生产者和消费者身上都使用Python/Pika。)

如果使用一个队列,并将多个消费者连接到该队列并加以利用,听起来会简单得多。通过这种方式,您可以向该队列发送1000条消息,并让可用的消费者接收这些消息

Producer --> RabbitMQ Exchange --> RabbitMQ Queue --> 10 Consumers

使用者预取(QoS)基本上只是意味着您可以设置使用者将预取的消息数量。例如,如果将该值设置为1,pika一次只能获取和处理一条消息,从而使其他消费者有机会消费和处理其他999条消息。

如果使用单个队列,并将多个消费者连接到该队列并加以利用,听起来会简单得多。通过这种方式,您可以向该队列发送1000条消息,并让可用的消费者接收这些消息

Producer --> RabbitMQ Exchange --> RabbitMQ Queue --> 10 Consumers

使用者预取(QoS)基本上只是意味着您可以设置使用者将预取的消息数量。例如,如果您将此设置为1,pika一次只能获取和处理一条消息,这样其他消费者就有机会消费和处理其他999条消息。

均匀分发是个好主意,但制作人仍必须发送1000条消息,这是我试图避免的。啊,那么您正试图分发一条包含1000个任务的消息,并让10个不同的使用者处理该消息的各个部分?我可能会把这条信息分成10条,然后继续上面的内容。这样你只会发送10条信息,而不是1000条。没错!不幸的是,1000项任务只是一个例子——实际上,任务数量最多可变化到100.000或更多。将它们打包到消息中的开销太大了。更不用说跟踪它们的全部完成情况会让人毛骨悚然。不幸的是,我认为这不是RabbitMQ可以解决的问题。感觉你在试图做一些超出AMQP职责范围的事情。均匀分发是个好主意,但制作人仍然必须发送1000条消息,这是我试图避免的。啊,所以你试图分发一条包含1000个任务的消息,有10个不同的消费者处理该信息的部分内容吗?我可能会把这条信息分成10条,然后继续上面的内容。这样你只会发送10条信息,而不是1000条。没错!不幸的是,1000项任务只是一个例子——实际上,任务数量最多可变化到100.000或更多。将它们打包到消息中的开销太大了。更不用说跟踪它们的全部完成情况会让人毛骨悚然。不幸的是,我认为这不是RabbitMQ可以解决的问题。感觉您正在尝试做一些超出AMQP职责范围的事情。
Producer --> RabbitMQ Exchange --> RabbitMQ Queue --> 10 Consumers