[英]Restart celery worker consumer connection to broker
我在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類中沒有此類功能。
現在如何重新建立與代理的連接?
在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
但是您可以隨意命名。 該記錄器在該州不再可用,因此您必須導入它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.