2014-09-22 3 views
1

Я попытался запустить очень простую задачу со связанной задачей, упомянутой в tutorialсельдерей: связана задача кидает ошибку соединения

add.apply_async((2, 2), link=add.s(16)) 

и получил исключение в рабочем процессе:

[2014-09-21 19:56:38,531: WARNING/Worker-1] C:\Python33\lib\site-packages\celery-3.1.15- 

py3.3.egg\celery\app\trace.py:364: RuntimeWarning: Exception raised outside body: OSError(ConnectionRefusedError(10061, 'No connection could be made because the target machine actively refused it', None, 10061),): 
Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\utils\__init__.py", line 420, in __call__ 
    return self.__value__ 
AttributeError: 'ChannelPromise' object has no attribute '__value__' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 436, in _ensured 
    return fun(*args, **kwargs) 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\messaging.py", line 173, in _publish 
    channel = self.channel 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\messaging.py", line 190, in _get_channel 
    channel = self._channel = channel() 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\utils\__init__.py", line 422, in __call__ 
    value = self.__value__ = self.__contract__() 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\messaging.py", line 205, in <lambda> 
    channel = ChannelPromise(lambda: connection.default_channel) 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 756, in default_channel 
    self.connection 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 741, in connection 
    self._connection = self._establish_connection() 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\connection.py", line 696, in _establish_connection 
    conn = self.transport.establish_connection() 
    File "C:\Python33\lib\site-packages\kombu-3.0.23-py3.3.egg\kombu\transport\pyamqp.py", line 112, in establish_connection 
    conn = self.Connection(**opts) 
    File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\connection.py", line 165, in __init__ 
    self.transport = self.Transport(host, connect_timeout, ssl) 
    File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\connection.py", line 186, in Transport 
    return create_transport(host, connect_timeout, ssl) 
    File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\transport.py", line 299, in create_transport 
    return TCPTransport(host, connect_timeout) 
    File "C:\Python33\lib\site-packages\amqp-1.4.6-py3.3.egg\amqp\transport.py", line 95, in __init__ 
    raise socket.error(last_err) 
OSError: [WinError 10061] No connection could be made because the target machine actively refused it 

I сделал небольшую отладку в transport.py и обнаружил, что рабочий пытался подключиться к порту 5672 на localhost. Похоже, что рабочий считает, что связанная задача должна выполняться через локальный экземпляр RabbitMQ. Это странно, потому что я указал удаленного брокера RabbitMQ в настройках конфигурации. Кроме того, установка работает, если я просто запустить вызов асинхронной без связанной задачи:

add.apply_async((2, 2)) 

Вот мои настройки:

  1. Использование RabbitMQ в качестве брокера и Redis, как результат обратно конец на удаленном Windows Server
  2. Запустите мой тестовый клиент на другом компьютере с Windows 7

Может ли кто-нибудь пролить свет? Благодарю.

+1

Я выяснил обходное решение, чтобы указать URL-адрес брокера, явно используя celery [параметр команды] (https://celery.readthedocs.org/en/latest/reference/celery.bin.base.html). Мне кажется, что связанная задача не импортирует настройку должным образом. – Tuzki

+0

Он также решил для меня, знаете ли вы, почему нужно явно указывать? Я использовал redis в качестве брокера. – ratbaby

ответ

1

По умолчанию celry пытается cennect к AMQP: // локального (RabbitMQ сервер) prof link Поэтому, прежде чем выполнять любые задачи, которые вы должны установить сервер RabbitMQ или настроить сельдерей использовать Redis или другой брокер. Таким образом, установка:

sudo apt-get install rabbitmq-server 

должен исправить вашу проблему.

Смежные вопросы