company_banner

Worker Service в .NET Core 3: что такое и зачем нужно

Автор оригинала: Microsoft
  • Перевод
В .NET Core 3 появился новый шаблон проекта под названием Worker Service. Этот шаблон разработан, чтобы дать вам отправную точку для создания кроссплатформенных сервисов. В качестве альтернативного варианта использования: он дает очень хорошую среду для создания консольных приложений, которая идеально подходит для контейнеров и микросервисов.



Подробнее о некоторых из преимуществ использования этого шаблона читайте под катом.



Внедрение зависимости


Шаблон Worker Service настраивает контейнер для внедрения зависимостей по умолчанию, готовый для использования. Это огромное преимущество по сравнению с общим шаблоном консоли.

Добавление служб включает обновление метода ConfigureServices в файле Program.cs:

Host.CreateDefaultBuilder(args)
   .ConfigureServices((hostContext, services) =>
   {
      services.AddTransient<ICustomerService,CustomerService>();
      services.AddHostedService<Worker>();
   });

Конфигурация


Те же настройки провайдеров конфигурации для ASP.NET Core дублируются здесь для Worker Services. Это дает нам мощную и знакомую среду для хранения информации о конфигурации:

  1. appsettings.json
  2. appsettings.{среда}.json
  3. User Secrets (только разработка)
  4. Переменные среды
  5. Аргументы командной строки

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

Логирование


Аналогично, провайдеры журналов были настроены в соответствии с настройками по умолчанию для ASP.Net Core, предоставляя вам следующих провайдеров:

  1. Console
  2. Debug
  3. EventSource
  4. EventLog (только при запуске на Windows)

Вы можете добавить провайдеров логирования, добавив метод ConfigureLogging к объекту Host в Program.cs:

Host.CreateDefaultBuilder(args)
   .ConfigureServices((hostContext, services) =>
   {
      services.AddHostedService<Worker>();
   })
   .ConfigureLogging(logging =>
   {
      logging.ClearProviders();
      logging.AddConsole();
   });

Для получения дополнительной информации изучайте документацию по ASP.NET Core.

Worker Startup Class


Наконец, в файле Worker.cs будет существовать основная часть вашего кода. В базовом классе BackgroundService есть 3 переопределяемых метода, которые позволяют связать себя с жизненным циклом приложения:

ExecuteAsync – абстрактный метод, используемый в качестве основной точки входа для вашего приложения. Если этот метод прерывается, приложение закрывается.

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

StopAsync – Виртуальный метод, который вызывается, когда приложение закрывается, и является хорошим местом для освобождения ресурсов и удаления объектов.

Итого


Новый шаблон Worker Service в .NET Core 3 создает среду хостинга, которая хорошо подходит для консольных приложений, микросервисов, контейнерных приложений и кроссплатформенных фоновых сервисов. Хотя эти преимущества можно настроить и независимо от шаблона, Worker Service предоставляет согласованную среду запуска для использования с ASP.NET Core и консольными приложениями.
Microsoft
Microsoft — мировой лидер в области ПО и ИТ-услуг

Похожие публикации

Комментарии 9

    +2
    А есть пример использования с systemd? Как-раз надо один микро-сервис на .NET Core 3.1 перенести в systemd в контейнере docker.
    +1
    Как то неожиданно оборвалась статья.

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

    services.AddControllers();
    достаточно для WebApi?
      0
      Так ведь шаблон Asp.Net Core Web application.
        0
        Да!
        0
        Странно, что автор оригинала рассказал как создать проект из шаблона в VS, но не упомянул как это сделать напрямую из CLI:
        dotnet new worker
          0
          А Worker Service можно установить потом, как обычную службу и что бы она отображалась в виндовых сервисах?
            +1
            Есть от них же статья на Хабре: habr.com/ru/company/microsoft/blog/446512
            Странная система публикаций, если честно. Видимо, куратору этого ресурса нужно выкладывать определённое число статей и он не хочет раньше времени всё потратить :)
              +1
              Да, вы можете воспользоваться sc.exe с помощью командной строки.

              sc create workertest binPath=c:\code\workerpub\WorkerTest.exe


              P.S Gorily опередил. В той статье как раз это и описано.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое