2011-05-19 3 views
6

Интересно, есть ли способ использовать запланированные задачи с SQL Azure? Каждая помощь приветствуется.Запланированные задачи с Sql Azure?

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

+0

Я бы зашел на сайт http://www.mygreatwindowsazureidea.com/ и проголосовал за эту функцию! – ryancrawcour

ответ

6

Сегодня нет SQL-агента для SQL Azure. Вам нужно будет вызывать однострочный оператор из фоновой задачи. Однако, если у вас уже есть веб-роль, вы можете легко создать поток для обработки этого в своей веб-роли без необходимости создания роли рабочего. Я писал о концепции here. Чтобы создать поток, вы можете либо сделать это в обработчике событий OnStart() (где экземпляр Role еще не добавлен в балансировщик нагрузки), либо в методе Run() (где экземпляр Role был добавлен к загрузке балансир). Обычно это хорошая идея для настройки в OnStart().

Одно предупреждение, которое может быть неочевидным, выполняете ли вы этот вызов в своей рабочей роли или в фоновом потоке существующей роли в Интернете. Если вы масштабируете свою роль, скажем, двумя экземплярами, вам необходимо убедиться, что ежедневный вызов происходит только из одного из экземпляров (иначе вы могли бы получить либо дубликаты, либо, возможно, дорогостоящую операцию, выполняемую несколько раз). Есть несколько методов, которые вы можете использовать, чтобы избежать этого, например, для блокировки строки таблицы или для аренды Azure Storage. С первым вы можете использовать эту строку для хранения метки времени в последний раз, когда была выполнена операция. Если вы приобрели блокировку, вы можете проверить, произошла ли операция в течение установленного временного окна (может быть, час?), Чтобы решить, был ли один из других экземпляров уже выполненным. Если вам не удалось получить блокировку, вы можете предположить, что другой экземпляр имеет блокировку и выполняет команду. Существуют и другие методы - это всего лишь одна идея.

+0

Это звучит интересно. – BitKFu

+0

hmmm. но у меня есть только роль службы WCF. Может ли перегружать роль службы WCF? – BitKFu

+1

Термин «роль» является синонимом «шаблона виртуальной машины». Все роли Windows Azure равны Windows Server 2008 с пакетом обновления 2 (SP2) или Windows Server 2008 R2. И, как роль веб-роли и рабочего роли, веб-роль WCF имеет OnStart() и Run(). Вы можете запускать свои фоновые задачи в любом из них. –

3

В дополнение к ответу Давида, если у вас есть много запланированных задач, чтобы сделать то, что может быть стоит посмотреть на:

(Вы можете использовать quartz.net в потоке, что упомянутый Дэвид, но lokad.cloud потребует немного больше архитектурные изменения)

+0

+1 для заранее подготовленных фреймворков. Опция Lokad является частью большего набора решений для создания приложений Windows Azure, и если вам нужно всего лишь планирование, решение quartz.net будет лучше соответствовать. –

2

Я надеюсь, что приемлемо говорить о вашей собственной компании. У нас есть веб-сервис, который позволяет вам это делать. Вы можете нажать эту ссылку, чтобы узнать подробности о том, как schedule execution of SQL Azure queries.

+1

Я пробовал это решение, это здорово! – ryancrawcour

2

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

using Microsoft.WindowsAzure.ServiceRuntime; 

     String g = RoleEnvironment.CurrentRoleInstance.Id; 
     if (!g.EndsWith("0")) 
     { 
      return; 
     } 
Смежные вопросы