Я пытаюсь RabbitMQ с this python.
Одна вещь, которую я заметил, заключается в том, что если я убиваю потребителя нечисто (эмулируя разбитую программу), сервер будет думать, что этот потребитель все еще существует надолго. Результатом этого является то, что любое другое сообщение будет проигнорировано.
Например, если вы убили потребителя 1 раз и снова подключитесь, то сообщения 1/2 будут проигнорированы. Если вы убьете другого потребителя, то 2/3 сообщения будут проигнорированы. Если вы убьете третью, тогда 3/4 сообщения будут проигнорированы и так далее.
Я попытался включить подтверждения, но, похоже, это не помогает. Единственное решение, которое я нашел, - это вручную остановить сервер и reset его.
Есть ли лучший способ?
Как воссоздать этот сценарий
-
Запустите rabbitmq.
-
Unarchive эта библиотека.
-
Загрузите пользователя и издателя здесь. Запустите amqp_consumer.py дважды. Запустите amqp_publisher.py, загрузив некоторые данные и наблюдайте, что он работает так, как ожидалось. Сообщения получаются в круговом стиле.
-
Убейте один из потребительских процессов с помощью kill -9 или диспетчера задач.
-
Теперь, когда вы публикуете сообщение, 50% сообщений будут потеряны.