芹菜失去了与RabbitMQ的联系

时间:2013-01-02 15:33:29

标签: rabbitmq celery

我的芹菜工作者偶尔会“失去”与RabbitMQ的联系。我查看了日志,并没有在芹菜日志中看到任何内容,但我确实在RabbitMQ日志中看到了一些内容。

=警告报告==== 2013年1月2日:: 09:13:04 === TCP连接上的异常< 0.14032.9>从1.1.1.1:43760 connection_closed_abruptly

我的设置非常简单。我有一台运行celery worker的服务器和另一台运行RabbitMQ队列的服务器。工作人员远程连接到队列。

我注意到如果我用RabbitMQ服务器重新启动服务器,我也必须手动重启芹菜工作者。

1 个答案:

答案 0 :(得分:0)

这似乎是我正在使用的init脚本的问题。当向Celery守护进程发送SIG TERM信号时,它不会杀死工作者。它使工作人员处于等待调解员向池中提供任务的状态,但SIG TERM会终止调解员。

查看我在下面找到的调试语句:

    [2013-01-02 16:23:58,624: DEBUG/MainProcess] Terminating celery.worker.consumer.Consumer...
    [2013-01-02 16:23:58,624: DEBUG/MainProcess] consumer: Stopping consumers...
    [2013-01-02 16:23:58,625: DEBUG/MainProcess] Terminating celery.worker.mediator.Mediator...
    [2013-01-02 16:23:59,034: DEBUG/MainProcess] Terminating celery.concurrency.processes.TaskPool...
    [2013-01-02 16:23:59,050: DEBUG/MainProcess] Terminating celery.worker.hub.Hub...
    [2013-01-02 16:23:59,050: DEBUG/MainProcess] consumer: Closing consumer channel...
    [2013-01-02 16:23:59,051: DEBUG/MainProcess] consumer: Closing broadcast channel...

解决方法是将SIG TERM信号发送给所有工作进程。

    if [ $(ps aux | grep -c 'celery') -eq 1 ] ; then
            ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | sudo xargs kill -HUP
    fi

每次我们的jenkins构建脚本都会运行时(每次提交后)都会发生这种情况。