Есть ли у Docker возможность запускать фоновые задачи, такие как Azure Webjobs? - PullRequest
0 голосов
/ 13 сентября 2018

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

Теперь я экспериментировал с переносом всего этого на Docker + Microservices (примечание: не потому, что Microservices - это «новая горячая вещь», а потому, что наше приложение подходит для разделения на более управляемые части / сервисы.)

Было легко разделить сайт на микро-сервисы Gateway API (или BFF Api's) +. Но я не уверен, как справиться с миграцией webjob. Веб-задания (в настоящее время) основаны на таймере очереди Azure и на триггере.

Все работает под: - Докер (на контейнерах Linux) - ASP.NET Core 2.1

У кого-нибудь есть предложения, как еще можно перенести WebJobs в Docker-контейнер чего-либо?

Я знаю, Hangfire - это инструмент, который позволяет выполнять фоновую обработку на веб-сайте ASP.NET. Но прежде чем идти по этому пути, просто проверяю, есть ли другие решения, которые люди используют.

Кроме того, .NET Core 2.1 имеет концепцию IHostedService ... поэтому я не уверен, является ли это законным решением и если да, то как ... как?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Другой вариант: Реализация фоновых задач в микросервисах с помощью IHostedService и класса BackgroundService .

  • Это для .NET Core 2.1
  • Не требуетвеб-сайт (например, Kestrel на ASP.NET Core)
  • По сути, это консольное приложение с некоторыми умностями для управления жизненным циклом ваших задач / ваших услуг.
  • Возможная чистая замена для веб-заданий /функции.
  • Типовые примеры кода хоста

например, пример действительно базового кода :

using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace GenericHostSample
{
    public class ProgramHelloWorld
    {
        public static async Task Main(string[] args)
        {
            var builder = new HostBuilder()
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<MyServiceA>();
                    services.AddHostedService<MyServiceB>();
                });

            await builder.RunConsoleAsync();
        }
    }
}
0 голосов
/ 14 ноября 2018

Теперь вы можете запускать веб-задания Azure в контейнере.

Если вы нацелились на .Net Core и используете Azure WebJobs SDK > 3.0 (который распространяется как библиотека .Net Standard 2.0), вы можете запустить код внутри контейнера. Используйте изображение на основе microsoft / dotnet

Вот пример в github: christopheranderson / webjobs-docker-sample

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