重启celery worker consumer连接到broker

时间:2016-06-10 16:51:31

标签: python celery

我找到了一个如何在芹菜文档(http://docs.openquake.org/celery-2.4.6/userguide/workers.html#writing-your-own-remote-control-commands)中重启工作者连接的示例:

from celery.worker.control import Panel

@Panel.register
def reset_connection(panel):
    panel.logger.critical("Connection reset by remote control.")
    panel.consumer.reset_connection()
    return {"ok": "connection reset"}

但它仅适用于Celery 3.0及更早版本。在Celery 3.1上的Consumer类中没有这样的功能。

如何立即重新建立与经纪商的联系?

1 个答案:

答案 0 :(得分:0)

工人内部被重写为使用3.1中的“bootsteps”(见http://docs.celeryproject.org/en/latest/userguide/extending.html

我认为从远程控制命令重置代理连接的最佳方法是使用panel.consumer.connection.close()代替:

from celery.worker.control import Panel, logger as control_logger

@Panel.register
def reset_connection(state):
    control_logger.critical("Connection reset by remote control.")
    state.consumer.connection.close()
    return {"ok": "connection reset"}

这将强制工作人员重新启动所有与消费者相关的启动步骤(请参阅上面链接中的图表)

顺便提一下,panel参数已重命名为state,但您可以根据需要为其命名。记录器在状态中不再可用,因此您必须将其导入。