Использование SignalR в рабочих ролях Azure

У меня есть размещенное в Azure веб-приложение, которое работает вместе с несколькими экземплярами рабочей роли. В настоящее время веб-приложение передает работу этим рабочим процессам, помещая сообщения в очередь Azure, чтобы рабочие могли их забрать. Рабочие передают сообщения о состоянии и ходе выполнения обратно, помещая сообщения в очередь «обратной связи». На данный момент, чтобы информировать своих браузерных клиентов о прогрессе, я делаю периодические вызовы опроса на основе ajax в браузере для метода контроллера MVC, который, в свою очередь, считывает очередь «обратной связи» Azure и возвращает эти сообщения в виде json обратно в браузер. .

Очевидно, SignalR выглядит как очень привлекательная альтернатива этому неуклюжему подходу к опросу/постановке в очередь, но я нашел очень мало указаний о том, как это сделать, когда мы говорим о нескольких рабочих ролях (в отличие от веб-роли), которым необходимо отправлять статус для отдельных или всех клиентов.

SignalR.WindowsAzureServiceBus Clemens Vasters выглядит превосходно, но в конце остается немного высоким и сухим, т.е. отсутствует хороший пример решения.

Добавлен комментарий. Судя по тому, что я читал, нет прямого взаимодействия с ролью worker (в отличие от интернета). роль) в клиент браузера с помощью подхода SignalR. Похоже, что воркеры должны взаимодействовать с веб-ролью с помощью очередей. Это, в свою очередь, вынуждает использовать метод опроса, т. е. очереди должны опрашиваться для сообщений от рабочих ролей — этот опрос должен исходить (инициироваться) из браузера, который он появляется (как можно настроить цикл опроса в веб-роли?)

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

Будем признательны за любые комментарии специалистов.


person t0rus    schedule 04.03.2012    source источник
comment
Какой самый простой способ ретранслировать рабочую роль => webrole => клиентский браузер?   -  person DeepSpace101    schedule 17.01.2013
comment
Как ответил бакр. У меня также было несколько рабочих ролей, работающих в качестве клиентов, и webrole их контролирует.   -  person Poul K. Sørensen    schedule 14.04.2013


Ответы (5)


Вы можете использовать свои рабочие роли в качестве клиентов SignalR, поэтому они будут отправлять сообщения веб-роли (которая является сервером SignalR), а веб-роль, в свою очередь, будет пересылать сообщения клиентам.

person bacr    schedule 03.07.2012
comment
У вас есть пример того, как это сделать? - person Philip Pittle; 01.12.2014
comment
Этот ответ проголосовал против, потому что в его нынешнем виде он не добавляет никакой ценности. - person The Muffin Man; 05.05.2017

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

person el_tone    schedule 14.03.2012
comment
Спасибо @el_tone Похоже, что веб-роль должна выполнять отправку клиенту браузера с помощью SignalR. Моя проблема в том, что сообщения, которые должны быть отправлены, исходят из рабочих ролей. Как получить такие сообщения от рабочих ролей. Если они помещают эти сообщения в очередь служебной шины, кажется, что служебная шина должна быть опрошена веб-ролью. Такой опрос — это то, чего пытаются избежать, используя SignalR в первую очередь! - person t0rus; 20.03.2012
comment
@t0rus: очереди служебной шины можно запускать в режиме блокировки, то есть без опроса. Прочитанная очередь возвращается либо по установленному времени ожидания (например, 24 часа), либо при получении сообщения. Блокировать поток IIS в этом случае нельзя, но с задачами кажется, что накладные расходы могут быть низкими. Интересно, могут ли накладные расходы быть ДАЖЕ ниже... - person DeepSpace101; 17.01.2013
comment
Похоже, ссылка не работает. - person Philip Pittle; 01.12.2014

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

Веб-роли могут подписываться на сервер очередей, где рабочая роль размещает сообщение? Если это так, клиент не будет «вытягивать», служба очередей предоставит коду на стороне веб-сервера новое сообщение, и через SignalR вы будете отправлять изменения клиенту без участия клиентских запросов. Связь между сетью и работником останется прежней (что, на мой взгляд, является правильным способом сделать это).

person Alejandro Nagy    schedule 12.07.2012

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

Как публиковать сообщения с помощью SignalR SqlMessageBus объясняет, как это сделать. это.

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

person markdevilliers    schedule 23.01.2014

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

person Dale Anderson    schedule 01.11.2012