Я изучал вопрос настройки рабочей роли для выполнения чего-то похожего на службу 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 с нуля до производства.
















