Уменьшенная публикация с уменьшенным подписчиком с NServiceBus
Я пытаюсь удалить пару из двух приложений, используя EDA и NServiceBus. В настоящее время у меня есть MT для продажи и MT для инвентаря. Всякий раз, когда продажа запрашивается через MT продаж, перед тем, как она будет одобрена, MT продаж будет вызывать MT Inventory, чтобы убедиться в наличии свободных запасов. Я хочу изменить способ работы, чтобы торговый MT просто автоматически одобрил его и опубликовал асинхронное событие "SaleCreated", на которое затем будут подписаны MT инвентаризации и MT биллинга. MT инвентаризации может затем отметить продажу в автономном режиме, если есть какие-либо товары, отсутствующие на складе.
Моя проблема в том, что у меня есть 10 экземпляров моего MT для продажи, 5 экземпляров моего MT для инвентаря и 3 экземпляра моего MT для выставления счетов. Все 3 приложения имеют собственный виртуальный IP поверх LoadBalancer, который находится перед серверами 10/5/3. В общем, у меня есть 1 виртуальная публикация (события SaleCreated) и 2 виртуальные подписки (подписчики Inventory и Billing). В идеале, продажа, которая обрабатывается MT продаж, должна создавать сообщение о событии SaleCreated для отправки на 1 и только 1 инвентарный MT, и 1 и только один платежный MT. Я действительно запутался, как это будет работать, так как я не видел примеров этого сценария на сайте NServiceBus. Кроме того, я не хочу, чтобы все сообщения отправлялись одному дистрибьютору для каждой подписки, так как это приведет к узкому месту на одной машине.
Есть какой-либо способ сделать это?
1 ответ
На стороне публикации вы бы использовали опцию хранения подписки БД (находится в производственном профиле), чтобы все экземпляры публикации видели один и тот же список подписчиков. На стороне подписки вы используете дистрибьютора для распределения загружаемых событий, так что каждое сообщение отправляется только одному экземпляру. Обратите внимание, что вы будете использовать одного дистрибьютора для каждого подписчика, так что никаких узких мест нет, и дистрибьютор не выполняет никакой реальной работы, поэтому это не представляет большой проблемы.