簡體   English   中英

Celery-[Errno 111]使用delay()觸發芹菜任務時,連接被拒絕

[英]Celery - [Errno 111] Connection refused when celery task is triggered using delay()

我有兩個應用程序服務器(都有django應用程序)。 兩者都有芹菜工人在跑。 RabbitMQ服務器在第三台不同的服務器上設置。

當通過使用delay()通過shell從兩個應用程序的服務器中的任何一個執行任何測試任務時,它們會正常執行。

如果從瀏覽器(通過ajax)從server1觸發了相同的任務,它將再次正常工作。

但是,在server2(與server1具有相同的配置和代碼)的情況下,當從瀏覽器觸發相同的任務時,會出現[錯誤111]連接被拒絕的錯誤。

在server1或server2上已安裝的某些軟件包是:

celery 3.1.18
amqp 1.4.9
django 1.8.5

有人可以幫我嗎? 謝謝!

錯誤跟蹤如下:

File "../lib/python2.7/site-packages/celery/app/task.py" in delay
  453.         return self.apply_async(args, kwargs)
File "../lib/python2.7/site-packages/celery/app/task.py" in apply_async
  559.             **dict(self._get_exec_options(), **options)
File "../lib/python2.7/site-packages/celery/app/base.py" in send_task
  353.                 reply_to=reply_to or self.oid, **options
File "../lib/python2.7/site-packages/celery/app/amqp.py" in publish_task
  305.             **kwargs
File "../lib/python2.7/site-packages/kombu/messaging.py" in publish
  172.                        routing_key, mandatory, immediate, exchange, declare)
File "../lib/python2.7/site-packages/kombu/connection.py" in _ensured
  457.                                            interval_max)
File "../lib/python2.7/site-packages/kombu/connection.py" in ensure_connection
  369.                         interval_start, interval_step, interval_max, callback)
File "../lib/python2.7/site-packages/kombu/utils/__init__.py" in retry_over_time
  246.             return fun(*args, **kwargs)
File "../local/lib/python2.7/site-packages/kombu/connection.py" in connect
  237.         return self.connection
File "../lib/python2.7/site-packages/kombu/connection.py" in connection
  742.                 self._connection = self._establish_connection()
File "../lib/python2.7/site-packages/kombu/connection.py" in _establish_connection
  697.         conn = self.transport.establish_connection()
File "../lib/python2.7/site-packages/kombu/transport/pyamqp.py" in establish_connection
  116.         conn = self.Connection(**opts)
File "../lib/python2.7/site-packages/amqp/connection.py" in __init__
  165.         self.transport = self.Transport(host, connect_timeout, ssl)
File "../lib/python2.7/site-packages/amqp/connection.py" in Transport
  186.         return create_transport(host, connect_timeout, ssl)
File "../lib/python2.7/site-packages/amqp/transport.py" in create_transport
  299.         return TCPTransport(host, connect_timeout)
File "../lib/python2.7/site-packages/amqp/transport.py" in __init__
  95.             raise socket.error(last_err)

我要說的是開始添加一些額外的日志記錄調用,然后在server2上調用delay之前,只是為了確保您的celery配置作為Web服務器運行時正確(與manage.py shell實例相對)。 聽起來像是一些針對gunicorn / uwsgi / apache / magic的啟動腳本沒有加載一些實際正確配置celery所需的變量。 或者只是在那種情況下被重寫。

真正可怕的方法是在server2上以manage.py runserver的身份運行您的Web服務器,並在調用.delay()並四處.delay()之前在其中放置一個PDB。 在執行此操作時,並不是您想打開通用互聯網的功能,而是其他所有操作都失敗了...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM