Мой рабочий с сельдереем, который работает с rabbitMQ, продолжает выдавать мне ошибку сокета - см. Ниже - после работы в течение нескольких минут. Хотелось бы узнать, в чем может быть основная причина проблемы? Думал, что это может быть межсетевой экран. Но отключение брандмауэра проблему не решило. Я работаю на машине с Windows 10.
C:\Users\user_\Desktop\Aida>celery -A tasks worker -l info -P eventlet
-------------- celery@user-RazerBlade v4.2.0 (windowlicker)
---- **** -----
--- * *** * -- Windows-10-10.0.17134-SP0 2018-07-13 12:27:03
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x4b95370
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: redis://
- *** --- * --- .> concurrency: 4 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> queueA exchange=(direct) key=tasks.task_1
.> queueB exchange=(direct) key=tasks.task_2
.> queueC exchange=(direct) key=tasks.task_3
.> queueD exchange=(direct) key=tasks.task_4
[tasks]
. tasks.task_1
. tasks.task_2
. tasks.task_3
. tasks.task_4
[2018-07-13 12:27:03,119: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2018-07-13 12:27:03,133: INFO/MainProcess] mingle: searching for neighbors
[2018-07-13 12:27:04,166: INFO/MainProcess] mingle: all alone
[2018-07-13 12:27:04,212: INFO/MainProcess] pidbox: Connected to amqp://guest:**@127.0.0.1:5672//.
[2018-07-13 12:27:04,217: INFO/MainProcess] celery@user-RazerBlade ready.
[2018-07-13 12:30:04,270: WARNING/MainProcess] Traceback (most recent call last):
[2018-07-13 12:30:04,271: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\eventlet\hubs\selects.py", line 55, in wait
listeners.get(fileno, noop).cb(fileno)
[2018-07-13 12:30:04,276: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\celery\worker\pidbox.py", line 120, in loop
connection.drain_events(timeout=1.0)
[2018-07-13 12:30:04,277: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\kombu\connection.py", line 301, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
[2018-07-13 12:30:04,278: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\kombu\transport\pyamqp.py", line 103, in drain_events
return connection.drain_events(**kwargs)
[2018-07-13 12:30:04,279: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\amqp\connection.py", line 491, in drain_events
while not self.blocking_read(timeout):
[2018-07-13 12:30:04,281: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\amqp\connection.py", line 496, in blocking_read
frame = self.transport.read_frame()
[2018-07-13 12:30:04,285: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\amqp\transport.py", line 243, in read_frame
frame_header = read(7, True)
[2018-07-13 12:30:04,286: WARNING/MainProcess] File "c:\users\user_\appdata\local\programs\python\python37-32\lib\site-packages\amqp\transport.py", line 426, in _read
raise IOError('Socket closed')
[2018-07-13 12:30:04,287: WARNING/MainProcess] OSError: Socket closed
[2018-07-13 12:30:04,288: WARNING/MainProcess] Removing descriptor: 756
Я не пользователь Windows, но я постараюсь дать вам несколько советов.
(1) - проверьте, соответствует ли ваша конфигурация rabbitmq вашей строке подключения (в частности, в linux я могу настроить rabbitmq только на прослушивание определенного интерфейса, чтобы он не принимал подключения, скажем, на интерфейсе обратной связи); Вариант конфигурации, который я бы проверил, - NODE_IP_ADDRESS
.
(2) - предполагая, что вы на 100% уверены, что ваш rabbitmq запущен, я бы проверил, соответствует ли NODENAME
вашей фактической конфигурации системы (т.е.проверьте правильность имени хоста)
(3) - наиболее очевидный, но все же стоящий проверки, является ли ваш пользователь rabbitmq правильным (я вижу, у вас есть пользователь guest
, вы сами создавали этого пользователя? Давали ли вы ему разрешения для своего конкретного виртуального хоста?)
(4) - и это приводит к другому очевидному вопросу, правильна ли ваша строка подключения. Моя строка подключения выглядит примерно так: BROKER_URL = 'amqp://my_user:very_secret_password@localhost:5672/my_vhost_name
(и на этом из вашего журнала кажется, что вы не настроили свою строку подключения для использования vhost)
Я также получил эту ошибку при запуске рабочих сельдерея с использованием опции --without-heartbeat. Удаление опции --without-heartbeat устранило это.
Я думаю, что для правильной работы - без пульса нам нужно внести изменения в настройки пульса брокера, чтобы он не отключал потребителей, которые не отправляют пульс. Хотя еще не пробовал.