Python rabbitmq筛选器工作队列

Python rabbitmq筛选器工作队列,python,rabbitmq,Python,Rabbitmq,我一直在阅读rabbitMQ教程,我正在寻找一些关于我应该使用的设置的帮助 我有一个1-50个任务的列表,我希望在一组4台计算机上运行一次(并且只运行一次),每台计算机运行一个worker。我已经在上设置了一个类似于教程2的模板 并非所有计算机都能运行所有任务(并非所有计算机都安装了软件) 我试图实现的是允许对发送给工作人员的任务进行筛选的设置 我阅读了关于如何在使用路由的广播情况下实现这一点的教程,但是我没有完全掌握如何将其映射回与教程2类似的更简单的推送模型(因为我不想广播作业) 在接下来的

我一直在阅读rabbitMQ教程,我正在寻找一些关于我应该使用的设置的帮助

我有一个1-50个任务的列表,我希望在一组4台计算机上运行一次(并且只运行一次),每台计算机运行一个worker。我已经在上设置了一个类似于教程2的模板

并非所有计算机都能运行所有任务(并非所有计算机都安装了软件)

我试图实现的是允许对发送给工作人员的任务进行筛选的设置

我阅读了关于如何在使用路由的广播情况下实现这一点的教程,但是我没有完全掌握如何将其映射回与教程2类似的更简单的推送模型(因为我不想广播作业)

在接下来的某个时刻,我希望能够根据负载动态调整每个盒子上的工作人员数量

我应该使用的最佳模型是什么?有什么好的教程或文章可以推荐学习这种方法吗

干杯,
Rob

RabbitMQ不提供有选择地使用队列中的消息的方法。队列中的使用者始终有机会接收该队列中的任何给定消息。因此,您必须对队列中的消息进行预筛选,以完成特定类型的工作。一旦您这样做了,您的消息消费者就只能从队列中消费他们可以处理的工作类型

假设你有3种工作要做:

  • 若巴
  • 乔布
  • 约伯
如果您试图将所有三种工作类型的消息推送到一个队列中,那么您的消费者必须了解它可以处理哪些消息。这不管用。如果您的消费者无法处理消息,则必须
nack
将消息返回队列。但不能保证你的信息会被另一个能处理它的消费者接收。它可能返回到同一消费者,该消费者随后将
nack
它再次返回队列

这是RabbitMQ中的最新版本

相反,您需要将邮件预筛选到队列中,以进行特定类型的工作。您可以通过使用exchange->queue绑定中的路由键来实现这一点

使用上述三种作业类型,您可以进行如下设置:

| exchange | routing key | queue | | -------- | ----------- | ----- | | jobs | job.a | job.a | | jobs | job.b | job.b | | jobs | job.c | job.c | |交换|路由密钥|队列| | -------- | ----------- | ----- | |工作,工作,工作,工作| |jobs | job.b | job.b| |jobs | job.c | job.c| 使用这些消息的代码需要知道它可以处理哪种类型的作业。然后,它只订阅该类型工作的队列

假设您有两台计算机是消息使用者。计算机1可以处理作业A和作业B。计算机2可以处理作业B和作业C。在这个场景中,您将得到一台处理JobA的计算机、两台处理JobB的计算机和一台处理JobC的计算机。总共只有两台计算机,但每台计算机处理多个作业。。。不过,只有他们知道如何处理工作

通过让Computer1订阅job.a和job.b的队列,可以保证Computer1只获取JobA和JobB。这同样适用于系统中的任何其他使用者

这样做之后,扩大工人数量就很容易了。你需要更多的JobA员工吗?没问题。只需添加作业的另一个使用者。一个队列


希望有帮助

感谢您提供了如此详细和解释充分的答案,这是有意义的,我将采取这种方法:)链接也很好^^