RabbitMQ — использует только сообщения с ошибкой очереди, которые имеют определенное свойство / тег / ключ, из очереди мертвых писем

#c# #rabbitmq #message-queue #messaging

#c# #rabbitmq #очередь сообщений #обмен сообщениями

Вопрос:

У меня есть очередь, которая принимает разные сообщения от нескольких служб.

Когда обработка этих сообщений завершается неудачно для потребителя, я хочу отправить сообщение обратно отправителю, сообщив ему, что произошел сбой, и запрашивая новое обновленное сообщение (с последними данными).

Запрос сообщений с ошибкой не будет работать для этого, потому что порядок сообщений жизненно важен (последовательные обновления одного и того же объекта должны обрабатываться в правильном порядке, или должна произойти повторная выборка данных).

У меня уже есть одна очередь мертвых писем для очереди, куда я могу отправлять сообщения с ошибкой.

Но как я могу заставить каждого потребителя, подключенного к этой очереди мертвых писем, обрабатывать ТОЛЬКО те сообщения, которые предназначены для него, а не все сообщения?

Я вижу, что для этого есть механизм с несколькими очередями и ключами маршрутизации: https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html

Но я не хочу иметь дело со многими очередями из-за сложности наличия многих очередей и потому, что я чувствую, что для использования многих очередей потребуется много выделенных потоков в каждой службе для чтения этих очередей.

Есть ли способ направлять сообщения, поступающие из одной и той же очереди, конкретному потребителю? Или, может быть, передать сообщение всем из них и позволить каждому из них обрабатывать свое собственное сообщение?

Я думаю об этом так: пометьте исходное сообщение тегом, отправьте его, при сбое оно отправляется в очередь мертвых писем с сохранением тега, затем его обрабатывает правильный потребитель.

Любые примеры кода будут высоко оценены. Я использую библиотеки C # для RabbitMQ, если это имеет значение.