rabbitmq django errno 104连接被对等方重置

n1bvdmb6  于 2022-11-23  发布在  RabbitMQ
关注(0)|答案(2)|浏览(221)

我尝试在AWS EC2的Ubuntu示例上运行我的django服务器。我使用gunicorn来运行服务器,如下所示:
gunicorn --workers 4 --bind 127.0.0.1:8000 woc.wsgi:application --name woc-server --log-level=info --worker-class=tornado --timeout=90 --graceful-timeout=10
当我发出请求时,我在浏览器上得到502,Bad Gateway.下面是服务器日志http://pastebin.com/Ej5KWrWs
www.example.com文件的某些部分settings.py(其中的行为根据主机名而更改)包括
iUbuntu是我笔记本电脑的主机名

if socket.gethostname() == 'iUbuntu':
    '''
    Development mode
    "iUbuntu" is the hostname of Ishan's PC
    '''
    DEBUG = TEMPLATE_DEBUG = True
else:
    '''
    Production mode
    Anywhere else than Ishan's PC is considered as production
    '''
    DEBUG = TEMPLATE_DEBUG = False

if socket.gethostname() == 'iUbuntu':
    '''Development'''
    ALLOWED_HOSTS = ['*', ]
else:
    '''Production Won't let anyone pretend as us'''
    ALLOWED_HOSTS = ['domain.com', 'www.domain.com',
                     'api.domain.com', 'analytics.domain.com',
                     'ops.domain.com', 'localhost', '127.0.0.1']

(我不明白这段代码的用途。因为我从别人那里继承了这段代码,而且服务器还在工作,所以在不了解它的用途的情况下,我没有费心删除它)

if socket.gethostname() == 'iUbuntu':
    MAIN_SERVER = 'http://localhost'
else:
    MAIN_SERVER = 'http://domain.com'

我不知道这里有什么问题。同样的代码在我的笔记本电脑上运行的很好。
我还做了一个小的hello world node.js服务于端口8000来测试nginx配置,它运行得很好。所以没有nginx错误。
最新消息:
我将DEBUG设置为True并复制了Traceback http://pastebin.com/ggFuCmYW
最新消息:
感谢@ARJMP的回复,这确实是celery 消费者没有联系到经纪人的问题。
我这样配置celery :app.config_from_object('woc.celeryconfig')和www.example.com的内容celeryconfig.py为:
BROKER_URL = 'amqp://celeryuser:celerypassword@localhost:5672/MyVHost' CELERY_RESULT_BACKEND = 'rpc://'
我是这样运行职工的:celery worker -A woc.async -l info --autoreload --include=woc.async -n woc_celery.%h
我得到的错误是:
consumer: Cannot connect to amqp://celeryuser:**@127.0.0.1:5672/MyVHost: [Errno 104] Connection reset by peer.

alen0pnh

alen0pnh1#

据我所知,您的问题是celery worker无法连接到代理。您有一些中间件试图调用celery任务,因此它在每次请求时都会失败(除非analyse_urls.delay(**kw)是有条件的)
我发现a similar的问题是通过升级他们的celery 版本来解决的。
另一个原因可能是EC2示例无法连接到消息队列服务器,因为EC2安全组不允许这样做。

vjrehmav

vjrehmav2#

尝试设置rabbitmq连接超时为30秒。这通常可以解决无法连接到服务器的问题。
您可以将connection_timeout添加到连接字符串中:
BROKER_URL = 'amqp://celeryuser:celerypassword@server.example.com:5672/MyVHost?connection_timeout=30'
请注意带有问号的格式:?connection_timeout=30
这是a query string parameter for the RMQ connection string
另外-确保url指向生产环境中的生产服务器名称/ url,而不是localhost

相关问题