Масштабирование SignalR с использованием Azure Service Bus (SignalR 1.x)

Патрик Флетчер

Предупреждение

Эта документация не подходит для последней версии SignalR. Взгляните на ASP.NET Core SignalR.

В этом руководстве вы развернете приложение SignalR в веб-роли Windows Azure, используя шину сообщений Service Bus для распределения сообщений по каждому экземпляру роли.

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

Prerequisites:

Серверная планка служебной шины также совместима с служебной шиной для Windows Server версии 1.1. Однако она несовместима с версией 1.0 служебной шины для Windows Server.

Цены

Шина данных служебной шины использует топики для отправки сообщений. Последние сведения о ценах см. в Service Bus. На момент написания этой статьи вы можете отправлять 1000 000 сообщений в месяц менее чем на 1 долл. США. Коммутационная панель отправляет сообщение служебной шины для каждого вызова метода узла SignalR. Существуют также некоторые контрольные сообщения для подключений, отключений, присоединения или выхода из групп и т. д. В большинстве приложений большинство трафика сообщений будет вызовами методов концентратора.

Обзор

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

  1. Используйте портал Windows Azure для создания нового пространства имен служебной шины.

  2. Добавьте эти пакеты NuGet в приложение:

  3. Создайте приложение SignalR.

  4. Добавьте следующий код в Global.asax, чтобы сконфигурировать бекплейн:

    protected void Application_Start()
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Для каждого приложения выберите другое значение "YourAppName". Не используйте одно и то же значение в нескольких приложениях.

Создание служб Azure

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

Снимок экрана: панель NEW с параметром облачной службы и значком, выделенным в приложении, а также красным кругом.

Создайте новое пространство имен Service Bus, как описано в разделе "Использование разделов и подписок Service Bus". Выполните действия, описанные в разделе "Создание пространства имен службы".

Снимок экрана: добавление нового пространства имен с записями, введенными в полях

Замечание

Выберите тот же регион для облачной службы и пространства имен служебной шины.

Создание проекта Visual Studio

Запустите Visual Studio. В меню "Файл" нажмите кнопку "Создать проект".

В диалоговом окне Создать проект разверните Visual C#. В разделе "Установленные шаблоны" выберите "Облако " и выберите "Облачная служба Windows Azure". Сохраните .NET Framework 4.5 по умолчанию. Назовите приложение ChatService и нажмите кнопку "ОК".

Снимок экрана: экран

В диалоговом окне "Новая облачная служба Windows Azure" выберите веб-роль "ASP.NET MVC 4". Нажмите кнопку со стрелкой вправо (>), чтобы добавить роль в ваше решение.

Наведите указатель мыши на новую роль, чтобы значок карандаша был видимым. Щелкните этот значок, чтобы переименовать роль. Назовите роль SignalRChat и нажмите кнопку "ОК".

Снимок экрана: экран

В мастере создания проекта ASP.NET MVC 4 выберите интернет-приложение. Нажмите кнопку ОК. Мастер проектов создает два проекта:

  • ChatService: этот проект является приложением Windows Azure. Он определяет роли Azure и другие параметры конфигурации.
  • SignalRChat: этот проект является вашим проектом ASP.NET MVC 4.

Создание приложения чата SignalR

Чтобы создать приложение чата, выполните действия, описанные в руководстве по началу работы с SignalR и MVC 4.

Используйте NuGet для установки необходимых библиотек. В меню "Сервис" выберите диспетчер пакетов NuGet, а затем консоль диспетчера пакетов. В окне консоли диспетчера пакетов введите следующие команды:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName Используйте параметр для установки пакетов в проект ASP.NET MVC, а не проект Windows Azure.

Настройте заднюю панель

В файле Global.asax приложения добавьте следующий код:

protected void Application_Start()
{
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    RouteTable.Routes.MapHubs();
}

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

Снимок экрана с параметрами и значками

Скопируйте строку подключения в буфер обмена, а затем вставьте ее в переменную connectionString .

Снимок экрана подключения Access Key к пространству имен, показывающий поля

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Развертывание в Azure

В обозревателе решений разверните папку "Роли " в проекте ChatService.

Снимок экрана: дерево обозревателя решений с параметром Signal R Chat, содержащимся в папке

Щелкните правой кнопкой мыши роль SignalRChat и выберите "Свойства". Перейдите на вкладку "Конфигурация". В разделе "Экземпляры" выберите 2. Вы также можете задать размер виртуальной машины Экстра Маленький.

Снимок экрана раздела

Сохраните изменения.

В обозревателе решений щелкните правой кнопкой мыши проект ChatService. Выберите Опубликовать.

Скриншот: проект обозревателя решений

Если вы впервые публикуете в Windows Azure, необходимо скачать свои учетные данные. В мастере публикации нажмите кнопку "Войти, чтобы скачать учетные данные". При этом вам будет предложено войти на портал Windows Azure и скачать файл параметров публикации.

Снимок экрана вкладки

Щелкните "Импортировать " и выберите скачанный файл параметров публикации.

Нажмите кнопку Далее. В диалоговом окне "Параметры публикации " в разделе "Облачная служба" выберите созданную ранее облачную службу.

Снимок экрана вкладки

Нажмите кнопку Опубликовать. Развертывание приложения и запуск виртуальных машин может занять несколько минут.

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

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

Снимок экрана: выбранное поле облачной службы, заполняющееся на портале Azure, с выделенным полем

Появление активности сообщения на панели мониторинга может занять несколько минут.

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

SignalR управляет временем существования темы. Пока приложение развернуто, не пытайтесь вручную удалять разделы или изменять параметры раздела.