Почему рабочий Celery выдает OSError: сокет закрыт

Мой celery worker, который работает с 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

person Aida    schedule 13.07.2018    source источник


Ответы (2)


Я не пользователь 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)

person Greg0ry    schedule 14.07.2018

Я также получил эту ошибку при запуске рабочих сельдерея с использованием параметра --without-heartbeat. Удаление параметра --without-heartbeat устранило эту проблему.

Я думаю, что для правильной работы --without-heartbeat нам нужно внести изменения в настройки сердцебиения брокера, чтобы он не отключал потребителей, которые не отправляют сердцебиения. Хотя этого не пробовал.

person famagusta    schedule 23.02.2021