Привет.
Мне необходимо отправлять сообщения с полным подтверждением доставки - сообщение было отправлено в нужную очередь и было взято на выполнение.
Дело в том, что задача, которая будет выполнена позже, даже на 5-10 секунд уже не имеет никакого значения.
Соответственно мне необходимо использовать два флага mandatory и immediate.
Оказалось, что флаг immediate не поддерживается в rabbitmq с версии 3.0. Вместо этого разработчики предлагают использовать TTL=0 для очереди.
С оговоркой, что ждать подтверждение, о том что сообщение было брошено на пол, не следует.
Такое поведение мне совсем не подходит.
Есть ли какая-нибудь возможность мониторить не взятые в обработку сообщения? Поделитесь опытом как вы решали похожие задачи.
В целом rabbitmq полностью покрывает весь спектр задач необходимых мне, но пока дело в выборе инструмента готов заменить его на аналоги с такой же функциональностью.
На всякий случай попробую подробнее описать задачу.
У меня есть клиенты, которые ходят в ручки API. API, в свою очередь, отправляет сообщение в rabbitmq. Rabbit - воркерам. В будущем будет некий heartbeat в виде базы данных, который будет хранить состояние выполняемых задач воркерами.
Клиенту я должен ответить сразу, что что-то пошло не так. Соответственно, он, обработав ошибку, мог повторить запрос - это требование. Количество воркеров я могу увеличивать до определенного предела, чтобы не упереться в железку. Расположить воркеров на других серверах тоже не могу - и тоже это требование (выполнение завязано именно на определенный сервер).