Я использую rabbitMQ, я беру каждое сообщение из очереди с basic_get без автоматической процедуры подтверждения, что означает, что сообщение остается в очереди до тех пор, пока я не получу подтверждение.
Иногда у меня есть сообщения, которые не могут быть обработаны из-за какого-то исключения, которое препятствует их полной обработке.
В этих случаях я хочу повторить попытку, скажем, два раза сразу, и если я все еще не смог обработать их в результате — я хочу повторить еще 3 раза с интервалом в один час, если затем все не получится, я бы хотел сообщение и удалить его из очереди навсегда.
Вопрос в том, существует ли какой-либо механизм в rabbitMQ, который предоставляет мне повторные попытки отправки сообщений (который также учитывает количество повторных попыток) и возможность выбора, когда повторная попытка запускается — какой-то механизм отсрочки?
Вы должны использовать несколько очередей для этого.
У меня была похожая проблема, я решил эту проблему, переместив сообщения, которые столкнулись с проблемой, в другую очередь.
Если у вас возникло исключение, то поймайте его, подтвердите сообщение и переместите его, скажем, в error_queue_1. Вы можете настроить второго слушателя (с другим таймером), который будет обрабатывать error_queue_1.
И вы можете повторять этот процесс столько раз, сколько считаете нужным.
Это также позволит вам понять, сколько сообщений было проблем, какое и т.д.
Других решений пока нет …