【问题标题】:How to assign priority to queues in RabbitMQ via celery configuration?如何通过 celery 配置为 RabbitMQ 中的队列分配优先级?
【发布时间】:2020-08-17 23:51:03
【问题描述】:

我正在尝试为 RabbitMQ 中的两个队列分配优先级,以便我的工作人员在从 Queue2 消费之前总是先消费并清除 Queue1 中的所有消息。我使用了一个名为 celeryconfig.py 的 celery 配置文件,如下所示:

import ssl
broker_url="amqps://USR:PWD@URL//"
result_backend="db+postgresql://USR:PWD@BURL?sslmode=verify-full&sslrootcert=/usr/local/share/ca-certificates/MY_CACERT.crt"
include=["my_tasks"]
task_acks_late=True
task_default_rate_limit="150/m"
task_time_limit=300
worker_prefetch_multiplier=1
worker_max_tasks_per_child=2
timezone="UTC"
broker_use_ssl = {'keyfile': '/usr/local/share/private/MY_KEY.key', 'certfile': '/usr/local/share/ca-certificates/MY_CERT.crt', 'ca_certs': '/usr/local/share/ca-certificates/MY_CACERT.crt', 'cert_reqs': ssl.CERT_REQUIRED, 'ssl_version': ssl.PROTOCOL_TLSv1_2}

目前我只有 1 个队列,这就是我开始芹菜工人的方式

celery -A celery_app worker -l info --config celeryconfig --concurrency=16 -n "%h:celery-worker" -O fair

我在这里阅读了简短的文档https://docs.celeryproject.org/en/v4.3.0/userguide/routing.html#routing-options-rabbitmq-priorities,但它只提到设置 ma​​x 优先级,并没有告诉我如何为 RabbitMQ 中的每个单独队列设置优先级。

  • RabbitMQ:3.7.17
  • 芹菜:4.3.0
  • Python:3.6.7
  • 操作系统:Ubuntu 18.04.3 LTS 仿生

有人可以解释一下吗?谢谢

【问题讨论】:

标签: python-3.x rabbitmq celery priority-queue


【解决方案1】:

我根本不熟悉 celery,但其他系统可以根据队列或其他过滤器运行单独的工作程序。每个工作人员可以有自己的配置,用于每秒消耗的消息、并发等。

您可以创建两个 celery 配置,一个使用例如10 个优先级,另一个具有 5 个优先级,并运行两个芹菜“实例”。

这会工作得更好......同一个工作人员中的每个消息优先级不能很好地工作。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 2016-09-17
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多