Как я могу восстановить очередь RabbitMQ? - PullRequest
0 голосов
/ 12 февраля 2019

Мы используем RabbitMQ для выполнения задач сельдерея.У нас была одна очередь, работавшая над 230000 задачами, которая была разбита вчера с журналом ниже:

<code>2019-02-11 22:30:32,770 WARNING 13003 [celery.worker.consumer] consumer.py:289 - consumer: Connection to broker lost. Trying to re-establish the connection...
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 278, in start
    blueprint.start(self)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/celery/bootsteps.py", line 123, in start
    step.start(parent)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 821, in start
    c.loop(*c.loop_args())
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/celery/worker/loops.py", line 70, in asynloop
    next(loop)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/kombu/async/hub.py", line 340, in create_loop
    cb(*cbargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/kombu/transport/base.py", line 164, in on_readable
    reader(loop)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/kombu/transport/base.py", line 146, in _read
    drain_events(timeout=0)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/amqp/connection.py", line 324, in drain_events
    return amqp_method(channel, args)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/amqp/channel.py", line 1647, in _basic_cancel_notify
    raise ConsumerCancelled(consumer_tag, (60, 30))
ConsumerCancelled: Basic.cancel: (0) None8
2019-02-11 22:30:32,878 INFO 13003 [celery.worker.consumer] consumer.py:479 - Connected to amqp://celery:**@127.0.0.1:5672//
2019-02-11 22:31:20,308 ERROR 13003 [celery.worker.consumer] consumer.py:364 - consumer: Cannot connect to amqp://celery:**@127.0.0.1:5672//: [Errno 104] Connection res$
Trying again in 2.00 seconds...
</code>

После сбоя rabbitmq я снова перезапустился, используя следующую команду:

sudo service rabbitmq-server restart

После перезагрузки rabbitmq iпотерял все очередиМоя очередь была надежной, а режим доставки сообщений был непостоянным.

Есть ли способ восстановить сообщения, которые были в очереди?У него были очень важные данные пользователя, которые обрабатывались.

1 Ответ

0 голосов
/ 12 февраля 2019

Неа.Непостоянный означает, что они были в ОЗУ, а не на диске.

Общий комментарий - RabbitMQ не является базой данных.Даже если вы установили постоянные очереди, ожидать от брокера сообщений надежной обработки временного хранилища 200 000 сообщений - это безумие.Ваша система должна быть спроектирована таким образом, чтобы посредник представлял собой буфер между задачами со средней длиной очереди, равной нулю.Если вы обнаружите такие большие числа, либо ускорите обработку, либо сохраните в базе данных, предназначенной для того, чтобы выдерживать случайные перезапуски практически без последствий.

...