Docker 是否能够运行后台任务(如 Azure Webjobs)?



我有一个遗留的研发应用程序,它是一个整体网站,然后是一些用于一些后台处理的网络工作。

现在,我一直在尝试将所有这些转移到 Docker + 微服务(注意:不是因为微服务是"新的热门东西",而是因为我们的应用程序适合拆分为更易于管理的部分/服务。

很容易将网站切成网关API(或BFF API(+微服务。但我不确定如何处理网络作业迁移。Web 作业(当前(基于 Azure 队列计时器和触发器。

一切都在以下情况下运行: - Docker(在Linux容器上( - ASP.NET 核心2.1

有人有任何建议,我可以通过哪些其他方法将 WebJobs 迁移到某些东西的 Docker 容器?

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

此外,.NET Core 2.1具有IHostedService的概念。所以我不确定这是否是一个合法的解决方案,如果是的话..如何?

现在可以在容器中运行 Azure Web 作业。

如果面向 .Net Core 并使用 Azure WebJobs SDK> 3.0(作为 .Net Standard 2.0 库分发(,则可以在容器内运行代码。使用基于 Microsoft/dotnet 的图像

下面是 github 中的一个例子:christopheranderson/webjobs-docker-sample

另一种选择:使用 IHostedService 和 BackgroundService 类在微服务中实现后台任务。

  • 这适用于 .NET Core 2.1
  • 不需要网站(例如 ASP.NET Core 上的 Kestrel(
  • 基本上是一个控制台应用程序,具有一些智能来处理任务/服务的生命周期。
  • 可能干净地替换 Web 作业/函数。
  • 通用主机代码示例

例如,一个非常基本的代码示例:

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

最新更新