Несмотря на то, что у нас есть много вопросов о веб-сокетах LoadBalancing, я не смог найти один, посвященный моему конкретному сценарию.
У меня будет следующий дизайн:
|=============|
-------------------| ActiveMQ |--------------------
| |=============| |
| |
|=============| |=============| |=============|
| MyApp_01 |------------| Database |------------| MyApp_02 |
|=============| |=============| |=============|
|
---------------------------
|
|=============|
|LoadBalancer |
|=============|
|
|
|=============|
| Client |
|=============|
У меня есть следующие компоненты:
- Мое приложение развернуто в двух экземплярах
- Очередь
ActiveMQ
, которую оба приложения слушают - База данных, в которую оба приложения записывают сообщения очереди.
- Балансировщик нагрузки, который еще предстоит определить между Nginx или некоторыми Microsoft Service Fabric (я действительно не очень разбираюсь в этих технологиях, что делает поиск еще сложнее: S)
- Мой клиентприложение, которое подключается к балансировщику нагрузки
Оба экземпляра моего приложения прослушивают одну и ту же очередь.Получив сообщение, экземпляр удаляет его из очереди, сохраняет в базе данных и передает через веб-сокеты любому клиенту, подключенному к нему.Оба экземпляра прослушивают очередь, поэтому любой из них может быть тем, кто удаляет сообщение из очереди, я не имею над ним никакого контроля (я думаю, что не должен).Проблема возникает, когда, например, в приведенном выше сценарии у нас есть клиент, подключенный к MyApp_02
, а MyApp_01
- это тот, кто получает и передает сообщение.Клиент никогда не получит никакого сообщения, потому что он подключен к MyApp_02
.
Что я могу сделать в этом сценарии?Должен ли я найти способ вещания из всех случаев ...?Как бы я это сделал?Есть ли в Nginx или Microsoft Service Fabric что-нибудь, что могло бы мне помочь?
Если это имеет значение, я использую .Net Core 2.2
с SignalR
в своем приложении.
Заранее спасибо,