Python 芹菜工人使用“--without heartbeat”标志运行的应用程序影响

Python 芹菜工人使用“--without heartbeat”标志运行的应用程序影响,python,celery,Python,Celery,讨论从高层次上讨论了使用——不使用hearbeat——不使用流言蜚语——不使用migle旗帜经营芹菜工人的一些影响 我想知道--withheartbeat标志是否会影响工作人员检测代理断开连接和尝试重新连接的能力。芹菜文档只隐晦地提到这些在应用层而不是TCP/IP层起作用的心跳。好的——我真正想知道的是,消除这些消息是否会影响我的工作人员的工作能力——特别是检测代理断开连接,然后尝试适当地重新连接 我自己运行了一些快速测试,发现在传递了--无心跳标志的情况下,工作人员仍然非常快地检测到代理断开连

讨论从高层次上讨论了使用
——不使用hearbeat——不使用流言蜚语——不使用migle
旗帜经营芹菜工人的一些影响

我想知道
--withheartbeat
标志是否会影响工作人员检测代理断开连接和尝试重新连接的能力。芹菜文档只隐晦地提到这些在应用层而不是TCP/IP层起作用的心跳。好的——我真正想知道的是,消除这些消息是否会影响我的工作人员的工作能力——特别是检测代理断开连接,然后尝试适当地重新连接

我自己运行了一些快速测试,发现在传递了
--无心跳
标志的情况下,工作人员仍然非常快地检测到代理断开连接(由我关闭RabbitMQ实例启动),他们尝试重新连接到代理,并在我重新启动RabbitMQ实例时成功地重新连接到代理。因此,我的基本测试表明,心跳对于基本的健康检查和功能是不必要的。他们到底有什么意义?我不清楚这一点,但在最基本的层面上,它们似乎对worker功能没有影响

关闭心跳的实际、特定于应用程序的含义是什么?

所以这是心跳机制的核心。现在,由于AMQP使用TCP,芹菜工人将尝试重新连接,如果他们无法建立连接或TCP协议要求时。因此,似乎不需要心跳机制。但它有几个优点:

  • 它不依赖于代理协议,因此如果代理有一些内部问题或使用UDP,那么工作人员仍然会知道是否没有收到事件,并能够相应地采取行动

  • 心跳机制检查事件是否被发送和接收,这是应用程序按预期运行的更大指标。例如,如果代理没有足够的空间,并且开始删除事件,那么worker将通过heartbeat机制对此进行指示。如果工作人员正在使用多个代理,它还可以决定连接到另一个应该不那么繁忙的代理


  • 与其通过关闭工作进程进行测试,不如尝试从一端断开网络连接。在这种情况下,TCP不会完全关闭连接。这将是一个更好的测试,用于确定心跳(应用程序级别)是否正常。TCP心跳也可以配置,但在合理的时间内无法在大多数系统上运行。Re:第2点:这是否意味着如果我没有添加任何工作代码来处理丢失的心跳,那么启用或不启用心跳之间仍然没有实际区别?也就是说,需要启用心跳,并且我编写了处理心跳丢失情况的特定代码?我认为工作人员的默认行为是尝试重新连接到代理。这就是你们所缺少的,根据你们的实验,它是不需要的,因为它已经在TCP级别上处理过了