Вызов клиента SignalR из веб-фермы

У меня есть следующие сценарии передачи сообщений

Клиент -> Вызывает SignalR -> Вызывает NServiceBus -> Обрабатывает сообщение внутри -> Вызывает службу шлюза NServiceBus с результатом -> Вызывает концентратор SignalR -> Обновляет клиент с результатом.

При выборе между использованием SignalR и длительным опросом мне нужно знать, является ли SignalR масштабируемым. Итак, выполняя домашнюю работу, я наткнулся на SignalR на служебной шине Azure. Настройка выполняется при запуске приложения Global.asax.

В конечном итоге мне нужно сделать это изнутри обработчика NServiceBus:

        var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        context.Clients.Group(group).addMessage(message);

Вопрос в том, будет ли контекст поднят, потому что я (потенциально) вызываю его с другого компьютера, отличного от того, к которому был подключен клиент?

Также какова схема сегментирования, которую реализация SignalR использует для заполнения тем? Я знаю, что могу настроить его для использования N-количества тем, но как он на самом деле определяет, какое сообщение относится к каким темам и является ли оно релевантным для внешнего вызывающего абонента PoV.


person Alwyn    schedule 26.03.2013    source источник


Ответы (1)


Вы должны иметь возможность использовать GlobalHost.ConnectionManager.GetHubContext в любом приложении, где вы зарегистрировали ServiceBusMessageBus в качестве своего IMessageBus через SignalR GlobalHost.DepenencyResolver. Это делается за вас, если вы вызываете GlobalHost.DepenencyResolver.UseServiceBus(...) в приложении.

Если вы сделаете это, сообщение будет опубликовано в служебной шине Azure для каждого вызова addMessage или любого другого метода концентратора в IHubContext, возвращенном из GetHubContext. Если есть подписанные клиенты, подключенные к другим узлам в веб-ферме, другие узлы получат сообщение от служебной шины и ретранслируют его подписанным клиентам.

Тема, к которой относится сообщение, не должна иметь значения с точки зрения внешнего вызывающего абонента. Вы можете использовать несколько тем для повышения пропускной способности, но в большинстве случаев достаточно одной темы.

Если вы решите использовать более одной темы, вы можете думать о теме, в которую отправляется сообщение, как о случайной. Единственное, что гарантируется, это то, что сообщения от одного и того же отправителя попадут в одну и ту же тему. Это позволяет SignalR хранить сообщения от одного и того же отправителя по порядку.

Осторожно: у SignalR еще не было официального выпуска, поддерживающего горизонтальное масштабирование. Версия 1.1 станет первым выпуском, официально поддерживающим горизонтальное масштабирование.

person halter73    schedule 26.03.2013
comment
Спасибо за ваш опыт! Ответил на мой вопрос. - person Alwyn; 26.03.2013