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

BROKER_HEARTBEAT = 10

我还在 RabbitMQ 配置中设置了这个配置值:
'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 服务器
  • 远程 worker 服务器

  • 看起来远程妖魔化的 Celery worker 正确地发送了心跳。使用 Celery 远程处理任务的 RESTful API 服务器由于某种原因没有使用心跳。

    最佳答案

    celery worker 的心跳是应用层的心跳,不是 AMQP 协议(protocol)的心跳。
    每个worker周期性地向BROKER中的“celeryev”事件交换发送心跳事件消息。
    心跳事件被转发回worker,这样worker就可以知道BROKER的健康状态。
    如果丢失心跳次数超过阈值,worker 可以对 BROKER 执行一些重新连接操作。

    对于其余的细节,你可以检查这个 page
    BROKER_FAILOVER_STRATEGY 部分描述了您可以为从 BROKER 中删除而执行的操作。

    关于python - celery 心跳不工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20957134/

    10-10 23:43