Python 芹菜-RabbitMQ中的一条消息能否同时被两个或多个工作人员使用?

Python 芹菜-RabbitMQ中的一条消息能否同时被两个或多个工作人员使用?,python,rabbitmq,celery,django-celery,Python,Rabbitmq,Celery,Django Celery,也许我问这个问题有点傻,但在我做进一步的工作之前,我需要先了解一下基本概念 我正在处理几千个RSS提要,使用多个芹菜工人节点和一个RabbitMQ节点作为代理。每个提要的URL都将作为消息写入队列中。工作者只是从队列中读取URL并开始处理它我必须确保单个RSS提要不会由两个工作人员同时处理。 本文提出了一种基于Memcahced的解决方案,用于在处理提要时锁定提要 但我试图理解的是,为什么我需要使用Memcached(或其他东西)来确保RabbitMQ队列上的消息不会被多个工作线程同时使用。Ra

也许我问这个问题有点傻,但在我做进一步的工作之前,我需要先了解一下基本概念

我正在处理几千个RSS提要,使用多个芹菜工人节点和一个RabbitMQ节点作为代理。每个提要的URL都将作为消息写入队列中。工作者只是从队列中读取URL并开始处理它我必须确保单个RSS提要不会由两个工作人员同时处理。

本文提出了一种基于Memcahced的解决方案,用于在处理提要时锁定提要


但我试图理解的是,为什么我需要使用Memcached(或其他东西)来确保RabbitMQ队列上的消息不会被多个工作线程同时使用。RabbitMQ(或芹菜)中是否有一些配置更改可以实现此目标?

提到的示例通常用于其他目标:它阻止您处理具有相同含义的不同消息(不是相同的消息)。例如,我有两个进程:第一个进程将一些URL放入队列,第二个进程从队列中获取URL并获取它们。若第一个进程将一个URL放入队列两次(甚至更多次),将会发生什么


注意:我为此使用了
Redis
存储和
setnx
操作(只能设置一次键)

在正常工作设置中,多个使用者肯定看不到单个MQ消息。您必须为涉及工人失败/崩溃的案例做一些工作,阅读自动确认和消息拒绝,但基本案例是合理的


我在您链接的文章中没有看到同步队列(read:MQ),所以(据我所知)他们使用锁机制(read:memcache)进行同步,作为替代。我能想到一些在适当的MQ设置中不会出现的问题。

正如其他人所指出的,您正在混合苹果和橙子

作为芹菜任务和MQ消息

您可以确保一条消息在同一时间仅由一个工作进程处理

例如

.apply将消息发布到您正在使用的MessageBroker(兔子、redis…)。 然后,消息将被路由到队列,并一次由一个工作进程使用。您不需要为此锁定,您可以免费使用:)

芹菜烹饪书上的示例演示了如何防止这样的两条消息(my_task.apply(1))同时运行,这是您需要在任务本身中确保的


当然,您需要可以从所有工作人员(memcached、redis…)访问的内容,因为他们可能在不同的机器上运行。

需要锁定消息和锁定提要之间存在差异。你需要做什么?@PlatinumAzure-想解释一下吗?我需要锁定消息(如果这意味着确保它不会被多个工作人员使用)。
@task(...)
def my_task(

my_task.apply(1)