Celery 工作人员未重新连接到网络 change/IP 更改
Celery worker not reconnecting on network change/IP Change
我为一些需要在工作场所执行的任务部署了 celery。这些任务是巨大的,我买了一些高规格的机器来执行这些任务。在我详细说明我的问题之前,让我简要介绍一下我已经部署的所有内容:
- 远程服务器上的 RabbitMQ 代理
- 在另一个远程服务器上推送任务的生产者
- 在我的工作场所部署了 3 台机器的工人
现在,当我开始时,整个过程和我测试的一样顺利,一切都很好!
问题
不幸的是,我忘了咨询我的网络人员有关固定 IP 地址的问题,而且根据我们所在的位置,我们的 ISP 没有固定 IP 地址。所以我的芹菜工人在网络断开时冻结并且什么都不做。即使网络为 运行,因为 IP 地址已更改,并且未重新创建与代理的连接或工作人员未重试连接。我试过 BROKER_CONNECTION_MAX_RETRIES = 0
和 BROKER_HEARTBEAT = 10
这样的配置。但我别无选择,只能post 把它拿出来,请教这方面的专家!
PS:每次网络更改 IP 地址 kill -9
时,我无法手动重启 worker
使用以下方式重新启动应用程序:
sudo rabbitmqctl stop_app
sudo rabbitmqctl start_app
帮我解决了这个问题。
另外,由于我有虚拟主机设置,我也需要进行重置。
不确定为什么需要这样做。或者实际上需要以上任何一项,但它确实为我解决了问题。
这个问题是因为我无法理解 AMQP 协议或 RabbitMQ 的本质。
当 celery worker 启动时,它会在 RabbitMQ 上打开一个通道。此频道在任何网络更改时都会尝试重新连接,但之前为该频道打开的 port/sock 已使用客户端的不同 public IP 地址注册。因此,celery worker(客户端)和 RabbitMQ(服务器)之间的协商无法恢复,因为客户端已更改地址,因此需要建立一个新通道,以防 public IP 地址发生变化客户。
以上@qreOct的回答是因为我没能正确表达问题,或者是因为我们的看法不同。仍然非常感谢您抽出宝贵时间!
我为一些需要在工作场所执行的任务部署了 celery。这些任务是巨大的,我买了一些高规格的机器来执行这些任务。在我详细说明我的问题之前,让我简要介绍一下我已经部署的所有内容:
- 远程服务器上的 RabbitMQ 代理
- 在另一个远程服务器上推送任务的生产者
- 在我的工作场所部署了 3 台机器的工人
现在,当我开始时,整个过程和我测试的一样顺利,一切都很好!
问题
不幸的是,我忘了咨询我的网络人员有关固定 IP 地址的问题,而且根据我们所在的位置,我们的 ISP 没有固定 IP 地址。所以我的芹菜工人在网络断开时冻结并且什么都不做。即使网络为 运行,因为 IP 地址已更改,并且未重新创建与代理的连接或工作人员未重试连接。我试过 BROKER_CONNECTION_MAX_RETRIES = 0
和 BROKER_HEARTBEAT = 10
这样的配置。但我别无选择,只能post 把它拿出来,请教这方面的专家!
PS:每次网络更改 IP 地址 kill -9
使用以下方式重新启动应用程序:
sudo rabbitmqctl stop_app
sudo rabbitmqctl start_app
帮我解决了这个问题。 另外,由于我有虚拟主机设置,我也需要进行重置。 不确定为什么需要这样做。或者实际上需要以上任何一项,但它确实为我解决了问题。
这个问题是因为我无法理解 AMQP 协议或 RabbitMQ 的本质。
当 celery worker 启动时,它会在 RabbitMQ 上打开一个通道。此频道在任何网络更改时都会尝试重新连接,但之前为该频道打开的 port/sock 已使用客户端的不同 public IP 地址注册。因此,celery worker(客户端)和 RabbitMQ(服务器)之间的协商无法恢复,因为客户端已更改地址,因此需要建立一个新通道,以防 public IP 地址发生变化客户。
以上@qreOct的回答是因为我没能正确表达问题,或者是因为我们的看法不同。仍然非常感谢您抽出宝贵时间!