python - Celery - RabbitMQ 中的一条消息可以同时被两个或多个工作人员使用吗?

标签 python rabbitmq celery django-celery

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

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

文章Ensuring a task is only executed one at a time提出了一种基于 Memcahced 的解决方案,用于在处理提要时锁定提要。

但我想了解的是,为什么我需要使用 Memcached(或其他东西)来确保 RabbitMQ 队列上的消息不会被多个工作人员同时使用。我可以对 RabbitMQ(或 Celery)进行一些配置更改以实现此目标吗?

最佳答案

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

我在您链接的文章中没有看到同步队列(阅读:MQ),因此(据我所知)他们正在使用锁定机制(阅读:memcache)进行同步,作为选择。我可以想到一些在正确的 MQ 设置中不会出现的问题。

关于python - Celery - RabbitMQ 中的一条消息可以同时被两个或多个工作人员使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153451/

相关文章:

Python 单元测试 task.apply_async()

javascript - Django:使用另一个 URL 参数过滤分页列表

python - 有没有为python编写的化学数据库?

node.js - rabbitmq队列中消息过多,队列不会过期

docker - 如何启用 RabbitMQ Docker 容器的集群

spring - 0-9-1在AMQP 0-9-1协议(protocol)中代表什么

django - 为了在docker中运行celery队列,我想指定多个具有不同并发度的队列

python - Celery:查询未决任务的标准方法?

python - 如何在 plotly express scatter 中为多种颜色设置一条趋势线?

python - Pandas 根据另一个数据帧将多个列和行值设置为 nan