Статьи

Как создать облачную службу Azure

 

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