Запланированные задачи с Sql Azure?

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

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


person BitKFu    schedule 19.05.2011    source источник
comment
Я бы пошел на mygreatwindowsazureidea.com и проголосовал за эту функцию!   -  person ryancrawcour    schedule 22.03.2012


Ответы (4)


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

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

person David Makogon    schedule 19.05.2011
comment
Хм. но у меня есть только роль службы WCF. Может ли роль службы WCF тоже перегружена? - person BitKFu; 19.05.2011
comment
Термин «Роль» является синонимом «Шаблон виртуальной машины». Все роли Windows Azure соответствуют Windows Server 2008 SP2 или Windows Server 2008 R2. И, как веб-роль и рабочая роль, веб-роль WCF имеет OnStart () и Run (). Вы можете запускать фоновые задачи в любом из них. - person David Makogon; 19.05.2011
comment
Спасибо за ответ. Это было большим подспорьем;) - person BitKFu; 20.05.2011

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

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

person Stuart    schedule 19.05.2011
comment
+1 для готовых рамок планирования. Опция Lokad является частью более крупного набора решений для создания приложений Windows Azure, и если все, что вам нужно, - это планирование, решение quartz.net будет более подходящим. - person David Makogon; 19.05.2011

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

person Cotega    schedule 21.03.2012

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

using Microsoft.WindowsAzure.ServiceRuntime;

        String g = RoleEnvironment.CurrentRoleInstance.Id;
        if (!g.EndsWith("0"))
        {
            return;
        }
person user1662812    schedule 13.11.2012