2013-03-08 5 views
3

Я хотел бы понять, сколько следующий сценарий поддерживается Azure Service Bus:Базовая оркестровка с Azure Service Bus?

рабочий сервер уведомляет неизвестное количество веб-серверов в событии Каждый веб-сервер обрабатывает сообщение (обработка занимает некоторое время - 10 -30 минут) Когда каждый веб-сервер выполняется с обработкой первого сообщения, все веб-серверы должны получать новое событие. В основном я пытаюсь синхронизировать несколько веб-ролей после выполнения долговременной работы в каждой веб-роли.

Сколько я могу получить «бесплатно» от сервисной шины Azure?

+1

Темы звучат так, как будто это соответствует законопроекту, было ли что-то по темам, которые вы считаете не подходящими здесь? –

+0

Я не специалист в ServiceBus, но пытаюсь выяснить, с чем это может помочь. Темы звучат как место для начала. Но может ли это помочь с синхронизацией или мне нужно задействовать роль моего сотрудника? – Igorek

+1

Темы позволяют реализовать pub/sub, поэтому один процесс может уведомлять о многих других процессах (ноль или более).Они могут, в свою очередь, уведомлять обо всех других процессах, что они обработали событие (хотя это становится немного болтливым, так как вы, вероятно, уведомляете один процесс), ответ может оказаться полезным здесь. Когда 1 процесс завершается обработкой события, он может отправить сообщение (отправить в нетегущую очередь) в процесс, который опубликовал событие. –

ответ

1

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

В то время как служебная шина будет предлагать функции pub/sub и корреляции, которые могут помочь вам здесь, мне описывается шаблон, в котором серверы регистрируют свой интерес, а также признают, что они обработали их сообщение, чтобы что-то подсчитало и как только у всех получилось, что будет отправлено 2-е сообщение.

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

Что-то, как долго работает BizTalk оркестровки для обработки регистрации, отслеживания подтверждений и публикации нового сообщения в сочетании с темой обслуживания шины для паба подразделам к веб-серверов может быть способ сделать это

3

Azure Service Bus имеет множество функций обмена сообщениями, которые помогают как в аспекте Pub/Sub вашего требования, так и в соотношении запроса/ответа. Концепция сессионных (сгруппированных/связанных) сообщений вместе с состоянием сеанса может быть очень полезной здесь. Ниже приведены некоторые конкретные ссылки, которые могут помочь: MSDN статьи на сессии: http://msdn.microsoft.com/en-us/magazine/jj863132.aspx

Образец для использования сессий: http://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Session-41c43fb4

образец запроса/ответа: http://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Request-0ce8fcaf

Обсуждение на корреляции и т.д .: http://channel9.msdn.com/Blogs/Subscribe/Service-Bus-Messaging-Deep-Dive

2

Вы МАЕ также хочу взглянуть на недавно выпущенную версию служебной шины Durable Task Framework here. Для некоторых примеров использования этой структуры см. here.

В принципе, используя эту структуру на вершине функций Service Bus, такие как сессии и т.д. Вы могли бы написать некоторые C# оркестровки код, который делает что-то примерно так:

  ... 
      // phase 1 
      List<Task> taskList = new List<Task>(); 
      foreach (var serverName in serverList) 
      { 
       taskList.Add(context.ScheduleTask<object>(typeof(ExecutePhase1OnWebServerActivity), serverName)); 
      } 

      // wait for all of the executions to finish 
      await Task.WhenAll(taskList); 

      // phase 2 
      taskList = new List<Task>(); 
      foreach (var serverName in serverList) 
      { 
       taskList.Add(context.ScheduleTask<object>(typeof(ExecutePhase2OnWebServerActivity), serverName)); 
      } 

      await Task.WhenAll(taskList); 
      ... 
0

Это смотрит на меня как сочетание Workflow Foundation и служебную шину.