Как использовать nServiceBus в отказоустойчивом кластере
Мы используем nServiceBus в нашей среде разработки, где у нас есть интерфейс публикации сообщений в службу (подписчик). Жизнь хороша.
FrontendWebServer -> MiddlewareServer
В нашей производственной среде мы будем использовать два интерфейса и два сервера промежуточного программного обеспечения для восстановления после отказа.
FrontendWebServer -> LoadBalancer (F5) -> MiddlewareServer
FrontendWebServer -> LoadBalancer (F5) -> MiddlewareServer
Это хорошо работает для URL-адресов, но поскольку нам нужно использовать имена компьютеров для MSMQ, мы застряли.
Мы не хотим указывать имя физического промежуточного программного обеспечения в каждой конфигурации внешнего интерфейса (поскольку это усложняет управление конфигурациями, а если один сервер промежуточного программного обеспечения выходит из строя, он также останавливает сообщения для своего конкретного внешнего интерфейса).
Мы попытались использовать распределитель nServiceBus (установленный на каждом интерфейсе), но кажется, что подписчик может слушать только одного распространителя.
Любые идеи, как мы можем обойти эту проблему, не используя отдельные конфиги?
1 ответ
Я бы подтолкнул F5 перед веб-серверами, чтобы сбалансировать эту нагрузку. Для кластера просто укажите имя и службы кластерного сервера, а не отдельные компьютеры. Например, если у вас есть Node1 и Node2, вы можете вызвать кластерный NSBNode или что-то в этом роде.
Если вы сделаете этот кластер Распределителем, вы можете добавить несколько рабочих узлов за ним для дальнейшей балансировки нагрузки. Снова в этом случае также сделайте ссылку на имена очереди кластера (queue@ClusterName).