rabbitmq - Celery - RabbitMQ - 执行顺序

标签 rabbitmq celery django-celery

我正在运行一些长任务,我需要确保排队的任务按接收顺序执行。我在第一次测试中发现,当我达到最大 worker 数 (CELERYD_CONCURRENCY) 时,发送的以下任务将排队,然后执行的第一个任务实际上是最新的任务。

当然,相反的行为是我所追求的,当有空闲 worker 时,最旧的消息是最先执行的。

这种行为的解释是什么,如何改变?

最佳答案

结果证明这是 Rabbitmq 设置 prefetchCount 的结果,它为每个 channel 预取一组消息。

由于我将队列用于长时间运行的任务,因此通过设置 CELERYD_PREFETCH_MULTIPLIER 解决了该问题。到 1,默认为 4,这样只会预取一条消息,从而保留执行顺序。

关于rabbitmq - Celery - RabbitMQ - 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302442/

相关文章:

java - 使用 RabbitMQ 实现 Saga 消息传递

python - 如何在不影响安全性的情况下授予 celery 足够的权限来运行根文件?

concurrency - Celery: worker 数量与并发性

rabbitmq - 重试丢失或失败的任务(Celery、Django 和 RabbitMQ)

python - 重启 celery 会导致重复任务吗?

java - 内存监控包含 RabbitMQ 监听器的应用程序的 Java 堆大小使用情况

php - 如何让 RabbitMQ worker 持续监听?

linux - RabbitMQ - 使用 curl 从队列中获取消息

python - 如何给 celery 中的每个节点命名

python - 一台机器上的多个 worker 执行不同的任务