.NET6中配置Hangfire定时任务

发布时间 2023-07-28 21:35:31作者: 成为码农的开始

1.安装Nuget包

  Hangfire.Core

  Hangfire.SqlServer                           --sqlserver数据库

    SqlServer需要配置其中一个包

    Microsoft.Data.SqlClient 

    system.data.sqlclient             

  Hangfire.AspNetCore                      --AspNetCore支持
  Hangfire.Dashboard.BasicAuthorization              --可视化+权限控制
  Hangfire.HttpJob                        --httpJob
 

2.创建SqlServer数据库

  CREATE DATABASE HangFireText

3.appsettings.json配置连接字符串

  "ConnectionStrings": { "Hangfire": "Data Source=.;Initial Catalog=HangFireText;Integrated Security=True;Encrypt=false" }
  其中 Encrypt=false 解决 证书链是由不受信任的颁发机构颁发的 问题
 

4.Program.cs

 

using Hangfire;
using Hangfire.HttpJob;
using Hangfire.AspNetCore;
using Hangfire.SqlServer;
using Hangfire.Dashboard.BasicAuthorization;

 

var Config = builder.Configuration;

 

builder.Services.AddHangfire(config => config
  .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
  .UseSimpleAssemblyNameTypeSerializer()
  .UseRecommendedSerializerSettings()
  .UseStorage(new SqlServerStorage(
  Config["ConnectionStrings:Hangfire"],
    new SqlServerStorageOptions
    {
      CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
      SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
      QueuePollInterval = TimeSpan.FromSeconds(15),
      UseRecommendedIsolationLevel = true,
      UsePageLocksOnDequeue = true,
      DisableGlobalLocks = true
    })).UseHangfireHttpJob());

 

// Add the processing server as IHostedService
builder.Services.AddHangfireServer();

 

 

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{

  Authorization = new[] {new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
  {

    RequireSsl = false,
    SslRedirect = false,
    LoginCaseSensitive = true,
    Users = new []
    {
      new BasicAuthAuthorizationUser
      {
        Login = "admin",
        PasswordClear = "admin"
      }
    }

  })}

});

 

app.UseRouting();

 

app.UseEndpoints(endpoints =>
{

  endpoints.MapGet("/", async context =>
  {
    await context.Response.WriteAsync("Hello World!");
  });

});