芹菜心跳不起作用

时间:2014-01-06 18:53:36

标签: python django rabbitmq celery

我在Celery设置中设置了心跳:

BROKER_HEARTBEAT = 10

我还在RabbitMQ config中设置了这个配置值:

'heartbeat' => '10',

但不知怎的,心跳仍然被禁用:

ubuntu@sync1:~$ sudo rabbitmqctl list_connections name timeout
Listing connections ...
some_address:37781 -> other_address:5672    0
some_address:37782 -> other_address:5672    0
...done.

任何想法我做错了什么?

更新:

所以现在我得到了:

ubuntu@sync1:/etc/puppet$ sudo rabbitmqctl list_connections name timeout
Listing connections ...
some_address:41281 -> other_address:5672    10
some_address:41282 -> other_address:5672    10
some_address:41562 -> other_address:5672    0
some_address:41563 -> other_address:5672    0
some_address:41564 -> other_address:5672    0
some_address:41565 -> other_address:5672    0
some_address:41566 -> other_address:5672    0
some_address:41567 -> other_address:5672    0
some_address:41568 -> other_address:5672    0
...done.

我有3台服务器:

  • RabbitMQ经纪人
  • RESTful API服务器
  • 远程工作服务器

看来远程妖魔化的芹菜工人正确发送心跳。使用Celery远程处理任务的RESTful API服务器由于某种原因没有使用心跳。

2 个答案:

答案 0 :(得分:3)

芹菜工作者的心跳是应用级别的心跳,而不是AMQP协议的心跳。 每个工作人员定期向BROKER中的“celeryev”事件交换发送心跳事件消息。 心跳事件被转发回工作人员,这样的工作人员可以知道BROKER的健康状况。 如果失去心跳的次数超过阈值,则工作人员可以对BROKER进行一些重新连接操作。

对于其他细节,您可以查看page 以下部分:BROKER_FAILOVER_STRATEGY描述了您从BROKER中删除时可能采取的措施。

答案 1 :(得分:0)

芹菜工人绝对支持AMQP心跳。配置项BROKER_HEARTBEAT用于定义AMQP客户端(芹菜工作者)的心跳间隔。 我们可以在Celery Doc处找到BROKER_HEARTBEAT的描述!

心跳的可能原因不起作用:

  1. 使用错误的传输方式,例如'librabbitmq' 如celery doc所述,只有'pyamqp'传输支持BROKER_HEARTBEAT。 我们需要检查是否安装了librabbitmq软件包 或者我们可以在代理网址中使用“ pyamqp”传输:“ pyamqp:// userid:password @ hostname:port / virtual_host”而不是“ amqp:// userid:password @ hostname:port / virtual_host”

  2. 启动后的三个心跳间隔内没有事件发送给celery worker Check code here to see how heartbeat works! 将在工作程序启动期间调用{_3}} rain_events! 如果没有事件发送给芹菜工作者,则不会调用connection.heartbeat_check

顺便说一下,connection.heartbeat_check被定义为see code here

希望帮助某人遇到心跳问题。