Docker是否有能力运行Azure Webjobs等后台任务?

时间:2018-09-13 03:17:10

标签: docker background-process

我有一个sorta-legacy R&D应用程序,它是一个整体网站,然后是一些用于某些后台处理的webjobs。

现在,我一直在尝试将所有这些迁移到Docker + Microservices(注意:不是因为Microservices是“新的热门东西”,而是因为我们的应用程序适合分成更多可管理的部分/服务。)

将网站切成Gateway API(或BFF Api)+微服务很容易。但是我不确定如何处理网络作业迁移。 Webjobs(当前)是基于Azure Queue计时器和触发器的。

一切都在以下条件下进行: -Docker(在Linux容器上) -ASP.NET Core 2.1

有人建议我可以将WebJobs迁移到其他东西的Docker容器吗?

我知道Hangfire是一种可在ASP.NET网站上启用后台处理的工具。但是在我走那条路之前,只需检查人们是否还有其他解决方案。

还有.NET Core 2.1 has the concept of an IHostedService ...所以我不确定这是否是一个合法的解决方案,如果是,那么..如何?

2 个答案:

答案 0 :(得分:1)

您现在可以在容器中运行Azure Webjobs。

如果将.Net Core作为目标并使用Azure WebJobs SDK> 3.0(作为.Net Standard 2.0库分发),则可以在容器内运行代码。使用基于microsoft/dotnet

的图片

以下是github中的一个示例:christopheranderson/webjobs-docker-sample

答案 1 :(得分:1)

另一个选项:Implement background tasks in microservices with IHostedService and the BackgroundService class

  • 这是.NET Core 2.1的
  • 不需要网站(例如ASP.NET Core上的Kestrel)
  • 基本上是一个控制台应用程序,具有一些智能功能,可以处理您的任务/您的服务的生命周期。
  • 可能彻底替代Webjob /功能。
  • Generic Host Code samples

例如really basic code example

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();
        }
    }
}