如果重新建立 redis 丢失的连接,Celery 不会执行新任务

Celery not executing new tasks if redis lost connection is restablished

我有一个配置为连接到 redis 的 Celery worker,如下所示:

 celery_app_site24x7 = Celery('monitoringExterne.celerys.site24x7',
                             broker=settings.REDIS['broker'], backend=settings.REDIS['backend'])

celery_app_site24x7.conf.broker_transport_options = {
    'visibility_timeout': 36000
}

celery_app_site24x7.conf.socket_timeout = 300
celery_app_site24x7.conf.broker_connection_max_retries = None
celery_app_site24x7.config_from_object('django.conf:settings')
celery_app_site24x7.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

问题是,如果 Redis 关闭并重新建立连接,则不会执行添加到队列中的新任务:

[2020-01-13 10:10:14,517: ERROR/MainProcess] consumer: Cannot connect to redis://xxx.xxx.xxx.xx:6380/10: Error while reading from socket: ('Connection closed by server.',).
Trying again in 2.00 seconds...

[2020-01-13 10:10:16,590: INFO/MainProcess] Connected to redis://xxx.xxx.xxx.xx:6380/10
[2020-01-13 10:10:16,699: INFO/MainProcess] mingle: searching for neighbors
[2020-01-13 10:10:17,766: INFO/MainProcess] mingle: all alone

我通过django手动调用了一个celery任务shell如下:

celery_tasks.site24x7.test.delay()

它 returns 我是异步任务 ID,但工作人员不处理此任务。

<AsyncResult:ff634b85-edb5-44d4-bdb1-17a220761fcc>

如果我继续延迟启动任务,队列会不断增加:

127.0.0.1:6379[10]> llen site24x7
(integer) 4
127.0.0.1:6379[10]> llen site24x7
(integer) 5

以下是芹菜状态和检查的输出

$ celery -A monitoringExterne --app=monitoringExterne.celerys.site24x7

status Error: No nodes replied within time constraint.

$ celery -A monitoringExterne --app=monitoringExterne.celerys.site24x7 inspect active

Error: No nodes replied within time constraint.

如果您的工作人员没有订阅 site24x7 队列,那么该队列中的任务数量将不断增加...尝试 运行 使用类似以下内容的工作:celery -A monitoringExterne.celerys.site24x7 -Q site24x7 -l info

此外,请记住 -A--app 是相同的标志,您不应同时使用两者。

如果您得到 No nodes replied within time constraint 输出,这意味着您的集群中没有活动的 Celery worker,这也可能是该队列中任务数量增加的原因 - 没有 worker处决他们!