使用Hangfire+.NET 6实现定时任务管理(推荐)

  • Post category:C#

以下是使用Hangfire+.NET6实现定时任务管理的完整攻略:

1. 什么是Hangfire

Hangfire是一个.NET平台上的开源库,它允许我们在用程序中轻松地实现后台任务和定时任务。Hangfire提供了一个简单的API,可以让我们在应用程序中创建、管理和监视后台任务和定时任务。

2. 如何使用Hangfire+.NET6实现定时任务管理

使用Hangfire+.NET6实现定时任务管理,我们需要按照以下步骤操作:

2.1. 步骤1:创建.NET6 Web应用程序

首先,我们需要创建一个.NET6 Web用程序。我们可以使用Visual Studio 2019或Visual Studio Code创建一个新的.NET6 Web应用程序。

2.2. 步骤2:安装Hangfire

接下来,我们需要安装Hangfire。我们可以使用NuGet包管理器或控制台安装Hangfire。例如,我们可以使用以下命令在控制台中安装Hangfire:

dotnet add package Hangfire

2.3. 步骤3:配置Hangfire

接下来,我们需要配置Hangfire。我们可以在Startup.cs文件中配置Hangfire。例如,我们可以添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHangfire(configuration => configuration
        .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
        .UseSimpleAssemblyNameTypeSerializer()
        .UseRecommendedSerializerSettings()
        .UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
        {
            CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
            SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
            QueuePollInterval = TimeSpan.Zero,
            UseRecommendedIsolationLevel = true,
            UsePageLocksOnDequeue = true,
            DisableGlobalLocks = true
        }));

    services.AddHangfireServer();
}

在上面的代码中,我们使用AddHangfire方法配置Hangfire。我们使用SetDataCompatibilityLevel方法设置数据兼容性级别。我们使用UseSimpleAssemblyNameTypeSerializer方法和UseRecommendedSerializerSettings方法设置序列化器。我们使用UseSqlServerStorage方法设置Hangfire存储。我们使用AddHangfireServer方法添加Hangfire服务器。

2.4. 步骤4:创建定时任务

最后,我们可以创建定时任务。我们可以在控制器或服务中创建定时任务。例如,我们可以创建一个名为`MyJob的定时任务:

public class MyJob
{
    public void Run()
    {
        Console.WriteLine("Hello, world!");
    }
}

在上面的代码中,我们创建了一个名为MyJob的类,并在其中定义了一个名为Run的方法。

2.5. 示例1:使用Hangfire在控制器中创建定时任务

在这个示例中,我们将演示如何在控制器中使用Hangfire创建定时任务。按照以下步骤操作:

  1. 创建.NET6 Web应用程序。

  2. 在NuGet包管理器中安装Hangfire

  3. Startup.cs文件中添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHangfire(configuration => configuration
        .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
        .UseSimpleAssemblyNameTypeSerializer()
        .UseRecommendedSerializerSettings()
        .UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
        {
            CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
            SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
            QueuePollInterval = TimeSpan.Zero,
            UseRecommendedIsolationLevel = true,
            UsePageLocksOnDequeue = true,
            DisableGlobalLocks = true
        }));

    services.AddHangfireServer();
}
  1. 在控制器中添加以下代码:
public class HomeController : Controller
{
    public IActionResult Index()
    {
        BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));

        return View();
    }
}

在上面的代码中,我们使用BackgroundJob.Enqueue方法创建一个定时任务。

  1. 运行应用程序,并访问/Home/IndexURL,查看定任务的执行结果。

2.6. 示例2:使用Hangfire在服务中创建定时任务

在这个示例中,我们将演示如何在服务中使用Hangfire创建定时任务。按照以下步骤操作:

  1. 创建.NET6 Web应用程序。

  2. 在NuGet包管理器中安装Hangfire

  3. Startup.cs文件中添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHangfire(configuration => configuration
        .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
        .UseSimpleAssemblyNameTypeSerializer()
        .UseRecommendedSerializerSettings()
        .UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
        {
            CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
            SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
            QueuePollInterval = TimeSpan.Zero,
            UseRecommendedIsolationLevel = true,
            UsePageLocksOnDequeue = true,
            DisableGlobalLocks = true
        }));

    services.AddHangfireServer();
}
  1. 创建一个名为MyService的服务,并添加以下代码:
public class MyService
{
    public void Run()
    {
        Console.WriteLine("Hello, world!");
    }
}

在上面的代码中,我们创建了一个名为MyService的类,并在其中定义了一个名为Run的方法。

  1. Startup.cs文件中添加以下代码:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
    // ...

    var myService = serviceProvider.GetService<MyService>();

    RecurringJob.AddOrUpdate(() => myService.Run(), Cron.Minutely);
}

在上面的代码中,我们使用RecurringJob.AddOrUpdate方法创建一个定时任务。

  1. 运行应用程序,并查看定时任务的执行结果。

结论

通过以上步骤,我们可以使用Hangfire+.NET6实现定时任务管理。我们可以在控制器或服务中创建定时任务。我们可以使用BackgroundJob.Enqueue方法创建一个定时任务。我们可以使用RecurringJob.AddOrUpdate方法创建一个定时任务。