Есть сервер, где развернут rabbimq, настроены разные очереди (topic), а периодически какая-то система в эти очереди добавляет сообщения. Это все готово и работает.
Моя задача написать косюмеров, чтобы они читали эти сообщения из очередей.
Я смотрел документацию RabbitMQ, все примеры оттуда разобрал - все понятно.
Но также, как в официальной документации, так и в других источниках, пишут, что это очень простые примеры, где многие вещи не учтены, и в реальных проектах так делать нельзя.
Мне непонятно, что именно надо учитывать, какие ситуации или обработки?
Недостаточно просто подключиться к RabbitMQ, объявить очередь, и слушать заданную очередь и читать сообщения?
Если у кого-то есть примеры, реальных, боевых косюмеров, буду благодарен!
Недостаточно просто подключиться к RabbitMQ, объявить очередь, и слушать заданную очередь и читать сообщения?
Представим — вы прочитали сообщение и выполнили свою логику. НО! во время выполнения произошел фатал, исключение или не предвиденная ошибка. Что делать? Как быть? Повторное чтение того же сообщения лупит все той же ошибкой и так миллиард раз, остановив весь поток. Ваши действия? А еще такой момент — все должно быть строго по очереди для одних консюмеров, но для других ошибка не так важна.
если произошла фатальная ошибка, то наверняка скрипт завершит работу, и сообщение будет передано следующему консюмеру (т.е. используется автоматический ack отключен), если такой есть, или пока текущий воркер после сбоя не будет автоматически перезапущен.
Если ошибка появляется из раза-в-раз значит проблема на стороне обработки сообщения, и тут только фиксить ошибки в скрипте обработки сообщения.
Но это же не относится к конфигурации подключения rabbitmq ?
И также сразу вопрос вытекает, правильно ли понимаю, что настройка basic_qos с prefetch_count = 1 (чтобы 1 воркер не получал больше 1 сообщения пока он занят) настраивается на стороне клиента (консюмера) и не зависит от настроек очереди ?
Ответ на ваш вопрос не ограничивается только "правильным созданием" потребителя. Вопрос более широкий и затрагивает такие аспекты как выбор топологии в соответствии с требованиями к задаче и архитектурой системы, обеспечение надежности доставки, идемпотентности сообщений, логики обработки сбоев. Некоторые вопросы описываются здесь https://www.rabbitmq.com/reliability.html. Другие, вы можете найти погуглив или посмотрев проекты github использующие rabbitmq. Поскольку все эти вещи зависят от решаемой задачи, нет определенного одного рецепта правильного "создания консьюмера", хотя и есть best practices по которым вам надо ориентироваться.