Я изучал вопрос настройки рабочей роли для выполнения чего-то похожего на службу Windows, и кажется, что рабочая роль лучше всего подходит для этой цели.
Вы можете создать рабочую роль для опроса очереди сообщений, или обработать некоторые данные в базе данных, или почистить некоторые данные и сохранить их и т. Д. Я собираюсь выбрасывать некоторые данные в http://www.ravenhq.com каждую минуту , для этого сообщения в блоге ничего интересного, но демонстрируется, как создать WorkerRole и запустить его в Azure.
Я подозреваю, что вы можете использовать NancyFX Self-Hosting здесь и разместить базовый веб-сайт Nancy, это было бы здорово ?
Построение службы (работник / роль)
Если вы еще этого не сделали, вам нужно будет установить Azure SDK, поэтому перейдите на страницу http://www.windowsazure.com/en-us/develop/net/ и нажмите «Установить SDK», чтобы получить возможность выбора. на 2012 или 2010 год. Я выбрал 2012, потому что я не знаю, что такое 2010, я перестал жить в прошлом.
Установщик фактически использует установщик веб-платформы, не будучи уверенным, есть ли другой способ его установки.
После установки вы можете создать новый проект в Visual Studio.
После нажатия OK вы увидите новый экран для выбора облачной службы.
Я не уверен, что это за «Visual Basic», и я не знаю F #, поэтому в списке Visual C # выберите «Рабочая роль» и добавьте ее справа, затем щелкните ее правой кнопкой мыши и переименуйте (или щелкните маленький значок пера)
Как только вы нажмете ОК, ваш проект будет создан и готов:
Это MyFirstWorker
конфигурация Azure, я вернусь к этому при развертывании. Сейчас мы будем работать вMyFirstRole
Проект поставляется с файлом WorkerRole, который заглушает код, который нам нужен
namespace MyFirstRole { public class WorkerRole : RoleEntryPoint { public override void Run() { // This is a sample worker implementation. Replace with your logic. Trace.WriteLine("MyFirstRole entry point called", "Information"); while (true) { Thread.Sleep(10000); Trace.WriteLine("Working", "Information"); } } public override bool OnStart() { // Set the maximum number of concurrent connections ServicePointManager.DefaultConnectionLimit = 12; // For information on handling configuration changes // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. return base.OnStart(); } } }
OnStart
возвращает bool, и, насколько я понимаю, рабочая роль не началась, пока она не вернулась. Это позволяет вам запускать любые задачи инициализации, и пока вы настраиваете, он сообщит Worker или Load Balancer, что он занят, пока вы не закончите и не вернете true.
Итак, я собираюсь настроить хранилище документов RavenDB на этом этапе.
Я использую RavenHQ, так что для установки этого типа требуется предварительное знание RavenDB / HQ, но если вы поменяли этот код для каких-либо других задач, остальная часть поста все равно будет применяться.
public override bool OnStart() { // Set the maximum number of concurrent connections ServicePointManager.DefaultConnectionLimit = 12; _documentStore = (new DocumentStore { ApiKey = "*api key removed*", Url = "https://aeo.ravenhq.com/databases/philliphaydon-TestDatabase", DefaultDatabase = "philliphaydon-TestDatabase" }).Initialize(); return base.OnStart(); }
Есть также OnStop
метод, который вы можете переопределить, который дает вам 30 секунд на очистку и сохранение любого состояния и т. Д. Если вам не удастся очистить в течение 30 секунд, вы забиты, он прекратит работу и потерял все Вы хотели сделать … Но 30 секунд это долгое время …
Второй метод — Run
это задача, которую будет выполнять роль, он содержит цикл while с условием true, чтобы сделать его бесконечным циклом. Это действительно важно, потому что если вы выйдете из цикла, ваша роль прекратится. Тогда это не будет фоновый сервис, который всегда работает!
Я не собираюсь абстрагироваться, я напишу свой код прямо в цикле while для этой статьи ?
public override void Run() { // This is a sample worker implementation. Replace with your logic. Trace.WriteLine("MyFirstRole entry point called", "Information"); var count = 0; while (true) { try { using (var session = _documentStore.OpenSession()) { session.Store(new Banana { Colour = "Yellow " + count }); session.SaveChanges(); } } catch (Exception ex) { //TODO: Implement www.raygun.io } finally { count++; } Thread.Sleep(60000); Trace.WriteLine("Working", "Information"); } }
В этот момент, если мы нажмем F5, мы сможем отладить роль и убедиться, что она делает то, что мы хотим.
Эмулятор Windows Azure запускается в системном трее, очень похоже на работу с веб-сайтами:
Поэтому щелкните правой кнопкой мыши и выберите «Показать пользовательский интерфейс эмулятора вычислений».
И вам будет представлен приятный пользовательский интерфейс, показывающий работающие сервисы.
Как вы можете видеть, он выкачивает «Работа» в консоль, и если я переключаюсь на RavenHQ Management Studio:
У меня есть банан, который сохраняется.
БОЛЬШОЙ. Теперь давайте приступим к работе на Azure!
Пакет развертывания
Прежде всего, нам нужно создать пакет, щелкнуть правой кнопкой мыши по проекту «MyFirstWorker» и выбрать «Пакет», это даст вам возможность упаковать конфигурацию, мы выберем Cloud, поскольку мы собираемся поместить его в Azure. Теперь.
Это приводит к созданию двух файлов.
Сам пакет и файл конфигурации облака. Они понадобятся, когда мы загрузим их в Azure дальше.
Развертывание на Azure
Теперь нам нужно создать облачный сервис и загрузить пакет. Перейдите на портал Azure и зарегистрируйтесь, если вы этого еще не сделали. Нажмите на облачные сервисы:
Затем создайте новый облачный сервис. В нижней части страницы появится небольшой рабочий процесс:
После того, как вы нажали «Создать» внизу, появится статус.
Теперь вы можете вернуться на вкладку облачных сервисов, и ваш новый сервис будет виден.
Щелкните первую ячейку, чтобы перейти к службе, и выберите «Загрузить новое производственное развертывание» (или готовлюсь к производству).
Теперь вы можете загрузить пакет.
Я выбрал вариант, Deploy even if one or more roles contain a single instance.
так как нам не нужно беспокоиться о масштабировании. Если это критически важная служба, вы можете развернуть более 1 экземпляра, чтобы увеличить доступность.
Теперь ваш сервис развернут.
Перед развертыванием я сбросил базу данных RavenDB, чтобы у нее не было данных, поэтому я написал оставшуюся часть этого сообщения в блоге, и он смог 7 минут…
И у нас есть 7 документов ?
Вот и все, простая и удобная настройка облачной службы Azure с нуля до производства.