【问题标题】:celeryd with RabbitMQ hangs on "mingle: searching for neighbors", but plain celery works带有 RabbitMQ 的 celeryd 挂在“混合:搜索邻居”上,但普通 celery 有效
【发布时间】:2016-05-24 15:21:42
【问题描述】:

我正在用 celeryd 和 RabbitMQ 撞墙。

教程中的这个例子工作得很好:

from celery import Celery

app = Celery('tasks', backend='amqp', broker='amqp://')

@app.task
def add(x, y):
return x + y

我跑:

celery -A tasks worker --loglevel=info

我得到了输出:

[2014-11-18 19:47:58,874: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2014-11-18 19:47:58,881: INFO/MainProcess] mingle: searching for neighbors
[2014-11-18 19:47:59,889: INFO/MainProcess] mingle: all alone
[2014-11-18 19:47:59,896: WARNING/MainProcess] celery@vagrant-ubuntu-trusty-64 ready.

我现在可以从 python repl 运行任务并获得结果。

但是当我安装 celeryd 时,进程挂在了混合步骤:

[2014-11-18 20:18:33,893: INFO/MainProcess] mingle: searching for neighbors

出现后无输出。

我的 /etc/default/celeryd 看起来像这样:

ENABLED="true"
CELERYD_NODES="w1"
CELERYD_CHDIR="/home/myusername/src/celery-test"
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERY_CONFIG_MODULE="celeryconfig"
CELERYD_LOG_FILE="/var/log/celery/%n.log"
CELERYD_USER="celery"
CELERYD_GROUP="celery"

我正在使用这些版本:

Ubuntu 14.04 芹菜 3.1.16(西帕特) 芹菜 3.1.6-1ubuntu1 rabbitmq-服务器 3.2.4-1 Python 2.7.6

因此,如果没有守护进程,celery 可以自行初始化,但使用守护进程 (celeryd) 显然会挂在混合步骤上。

一些论坛认为这是 RabbitMQ 达到磁盘空间限制的问题。我有很多磁盘,而且RabbitMQ自己的日志没有任何问题。

【问题讨论】:

    标签: python rabbitmq celery celeryd


    【解决方案1】:

    如果您使用数据库后端,在 celery 中添加以下选项应该可以解决问题:

        --without-mingle
    

    【讨论】:

      【解决方案2】:

      我从这条消息中得到了预感:

      [2014-11-18 16:20:17,216: WARNING/MainProcess] /usr/local/lib/python2.7/dist-packages/kombu/transport/librabbitmq.py:163: UserWarning:
          librabbitmq version too old to detect RabbitMQ version information
          so make sure you are using librabbitmq 1.5 when using rabbitmq > 3.3
      
        warnings.warn(UserWarning(W_VERSION))
      

      所以由于某种原因,我有 librabbitmq1 apt 包,它太旧了。

      原来问题出在 librabbitmq1 包上。我删除了它:

      sudo apt-get remove librabbitmq1
      

      python Celery/RabbitMQ 库做了某种回退到其他一些(可能是普通的 python?)实现,它有效!

      【讨论】:

        【解决方案3】:

        检查您的可用磁盘空间。 RabbitMQ 默认需要 1Gb 的可用空间。

        【讨论】:

        • 我在我的问题中说:“我有很多磁盘,RabbitMQ 自己的日志没有显示任何问题。”
        • 尝试重启你的rabbitmq服务器或者在circus conf文件中使用--without-mingle --without-gossip。我只是重新安装rabbitmq,它对我有用:)
        猜你喜欢
        • 2015-01-05
        • 2015-01-08
        • 2013-11-11
        • 2011-01-19
        • 2017-01-31
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 2018-05-05
        相关资源
        最近更新 更多