Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜工作者在网络更改/IP更改时未重新连接_Python_Python 2.7_Rabbitmq_Celery_Celery Task - Fatal编程技术网

Python 芹菜工作者在网络更改/IP更改时未重新连接

Python 芹菜工作者在网络更改/IP更改时未重新连接,python,python-2.7,rabbitmq,celery,celery-task,Python,Python 2.7,Rabbitmq,Celery,Celery Task,我为一些需要在工作场所执行的任务部署了芹菜。这些任务是巨大的,我买了一些高规格的机器来执行这些任务。在详细说明我的问题之前,让我先简要介绍一下我所部署的: 远程服务器上的RabbitMQ代理 在另一个远程服务器上推送任务的生产者 在我的工作场所部署的3台机器上的工人 现在,当我开始的时候,整个过程和我测试的一样顺利,所有的过程都很棒 问题 不幸的是,我忘了咨询我的网络人员关于固定IP地址的问题,根据我们的位置,我们没有ISP提供的固定IP地址。所以我的芹菜工人在网络上断开连接,什么也不做。即

我为一些需要在工作场所执行的任务部署了芹菜。这些任务是巨大的,我买了一些高规格的机器来执行这些任务。在详细说明我的问题之前,让我先简要介绍一下我所部署的:

  • 远程服务器上的RabbitMQ代理
  • 在另一个远程服务器上推送任务的生产者
  • 在我的工作场所部署的3台机器上的工人
现在,当我开始的时候,整个过程和我测试的一样顺利,所有的过程都很棒

问题

不幸的是,我忘了咨询我的网络人员关于固定IP地址的问题,根据我们的位置,我们没有ISP提供的固定IP地址。所以我的芹菜工人在网络上断开连接,什么也不做。即使网络正在运行,因为IP地址已更改,并且未重新创建到代理的连接,或者工作进程未重试连接。我尝试过类似
BROKER\u CONNECTION\u MAX\u RETRIES=0
BROKER\u HEARTBEAT=10
的配置。但我别无选择,只能把它贴在这里,寻找这方面的专家


PS:我无法在每次网络通过
kill-9

重新启动应用程序而更改IP地址时手动重新启动工作程序,方法是:

sudo rabbitmqctl stop_app
sudo rabbitmqctl start_app
为我解决了这个问题。 另外,由于我有虚拟主机设置,我也需要重新设置。
不知道为什么需要这样做。或者事实上,上述任何一项都是需要的,但它确实为我解决了问题

问题是因为我无法理解AMQP协议或RabbitMQ的本质

当芹菜工人启动时,它会在RabbitMQ打开一个通道。此通道在任何网络更改时都会尝试重新连接,但以前为该通道打开的端口/套接字已使用客户端的其他公共IP地址注册。因此,芹菜工作者(客户端)和RabbitMQ(服务器)之间的协商无法恢复,因为客户端已更改了地址,因此需要在客户端的公共IP地址发生更改的情况下建立新的通道

以上@qreOct的回答是因为我无法正确地表达这个问题,或者是因为我们的看法不同。还是非常感谢你抽出时间