你应该在哪里更新芹菜设置?在远程工作人员还是发件人?
例如,我有一个使用 Django 和 Celery 的 API。API 通过代理 (RabbitMQ) 将远程作业发送给我的远程工作人员。工作人员正在运行一个python脚本(不使用Django),有时这些工作会生成子任务。
我已经在两侧(发件人和工人)创建了芹菜设置,即它们都需要设置BROKER_URL
。但是,假设我想添加设置CELERY_ACKS_LATE = True
,我应该将此设置添加到哪一端?每个远程工作人员或发件人 (API)?
API 和远程工作人员都连接到同一个代理,每个代理的启动方式不同。API 通过 Django __init__.py
创建一个芹菜实例,工人通过主管启动芹菜,即 celery -A tasks worker -l info
Django Celery 设置只影响在 Django 服务器上运行的工作线程。
如果您的所有工作人员都是远程工作人员(就像我一样),那么在发送方,您所需要的只是将提交任务所需的配置放入任务队列。
所有其他设置都需要在远程工作人员上设置。
对于任务,在发送方,我需要做的就是像这样定义任务签名:
@app.task(name='report_task')
def reportTask(self, link):
pass
然后在工作线程端,您需要创建一个具有相同名称并指向同一代理的新 Celery 应用程序;对于其他 Celery 设置,您需要在远程工作人员上声明它们。
并在远程工作人员上实现任务逻辑(只要每个工作人员具有相同的任务名称和函数参数,就可以为每个工作人员使用不同的任务逻辑)
CELERY_ACKS_LATE = True
属于worker。它描述了工作人员是否应在消费后(完成前)或完成后(延迟)立即将任务标记为"已确认"。这两种方法都有其缺点,我想你知道你在做什么。
当然,最好为双方提供单个配置文件并使用它。例如,拥有整个项目的通用代码库,并在 VCS 中更新文件并部署后 - 重新启动所有各方。
但在这种情况下,使用此特定标志,您只能重新启动工作线程。