MassTransit: как отправить сообщение конкретным потребителям?

#message-queue #masstransit

#очередь сообщений #masstransit

Вопрос:

Извините, если мой вопрос глупый, я новичок в MassTransit.

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

Как я могу добиться этого с помощью MassTransit? Мои транспортные средства — это служебная шина RabbitMQ / Azure.

Спасибо!

Ответ №1:

MassTransit реализует стандартные шаблоны обмена сообщениями, которые не зависят от MassTransit. Двухточечный, публикация-подписка, недопустимый канал сообщений, канал мертвых писем и так далее:

введите описание изображения здесь

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

Все остальное можно легко сделать, добавив код к потребителям:

 await bus.Publish(new MyMessage { ReceiverGroup = "group1", ... });
  

и

 public async Task Consume(IContext<MyMessage> context)
{
    if (context.Message.ReceiverGroup != myGroup) return;

    ...
}