#c# #rabbitmq #message-queue #messaging
#c# #rabbitmq #очередь сообщений #обмен сообщениями
Вопрос:
У меня есть очередь, которая принимает разные сообщения от нескольких служб.
Когда обработка этих сообщений завершается неудачно для потребителя, я хочу отправить сообщение обратно отправителю, сообщив ему, что произошел сбой, и запрашивая новое обновленное сообщение (с последними данными).
Запрос сообщений с ошибкой не будет работать для этого, потому что порядок сообщений жизненно важен (последовательные обновления одного и того же объекта должны обрабатываться в правильном порядке, или должна произойти повторная выборка данных).
У меня уже есть одна очередь мертвых писем для очереди, куда я могу отправлять сообщения с ошибкой.
Но как я могу заставить каждого потребителя, подключенного к этой очереди мертвых писем, обрабатывать ТОЛЬКО те сообщения, которые предназначены для него, а не все сообщения?
Я вижу, что для этого есть механизм с несколькими очередями и ключами маршрутизации: https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html
Но я не хочу иметь дело со многими очередями из-за сложности наличия многих очередей и потому, что я чувствую, что для использования многих очередей потребуется много выделенных потоков в каждой службе для чтения этих очередей.
Есть ли способ направлять сообщения, поступающие из одной и той же очереди, конкретному потребителю? Или, может быть, передать сообщение всем из них и позволить каждому из них обрабатывать свое собственное сообщение?
Я думаю об этом так: пометьте исходное сообщение тегом, отправьте его, при сбое оно отправляется в очередь мертвых писем с сохранением тега, затем его обрабатывает правильный потребитель.
Любые примеры кода будут высоко оценены. Я использую библиотеки C # для RabbitMQ, если это имеет значение.