Сервисная шина Azure, AWS SNS, RabbitMQ -> Все подписчики получают сообщение? - PullRequest
0 голосов
/ 25 сентября 2019

Рассматривая шаблон Pub / Sub, я натолкнулся на сценарий объединения:

Предположим, у вас есть горизонтально масштабируемое приложение, в котором есть X экземпляров.Все они подписываются на тему, в которой есть сообщения типа «Перевести 10 долларов США со счета А на счет Б».Когда кто-то публикует сообщение в этой теме, все подписчики получат это сообщение?

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

Как справиться с этим сценарием?Вы покидаете паб / саб и начинаете объединяться?

1 Ответ

0 голосов
/ 30 сентября 2019

Позвольте мне объяснить несколько вещей на примере, прежде чем вы полностью это поймете.Я работал над служебной шиной Azure, поэтому я объясню в этом контексте.

В Pub / sub у вас есть одна тема и возможна множественная подписка.Допустим, у нас есть тема «Шоппинг-тема».У нас есть 2 подписки, которые называются «Оплата-подписка», «Корзина-подписка».Сейчас мы публикуем сообщение «Платеж обработан» по теме.Подписка выбирается этим сообщением по усмотрению подписчика, и причина в том, что подписка должна указывать, какие сообщения она хочет выбрать.

В служебной шине Azure у нас есть нечто, называемое правилом (метка сообщения).Правило по умолчанию заключается в том, что подписка прослушивает все сообщения, но мы можем переписать это поведение и сказать, что меня интересует только конкретное сообщение.В вышеприведенном случае добавлено правило «Payment-Subscription» для прослушивания сообщения «Payment-processing», поэтому сообщение добавляется в подписку «Payment-Subscription» для обработки.Хотя «Корзина-подписка» также подписана на ту же тему, но игнорирует это сообщение, поэтому оно не добавляется в свою подписку.Таким образом, любая предполагаемая подписка может прослушивать определенные сообщения, не обязательно все из них.

Теперь мы обсудим индивидуальную подписку.Допустим, у нас есть сообщение, добавленное в «Payment-Subscription».Эта подписка имеет 2 экземпляра / процесса, которые готовы обработать сообщение «Платеж обработан».Первый процесс, который выберет сообщение, обработает сообщение и удалит его из подписки.

...