也许我问这个问题很愚蠢,但在我做进一步的工作之前我需要先了解一下基本概念。
我正在处理几千个 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/