Net Core环境搭建Hangfire项目

发布时间 2023-06-10 12:37:51作者: netcore_vue

添加相关代码配置。
1.因hangfire的任务需要数据库持久化,我们在Startup类中修改ConfigureServices,简单配置如下:

var connection =  Configuration["ConnectionsStrings"];    //数据库链接配置
services.AddHangfire(x => x.UseSqlServerStorage(connection));

如果需要配置详细信息,则配置如下:

  //hangfire的任务需要数据库持久化
            //Hangfire.AspNetCore
            //Hangfire.MySql.Core  mysql引用 大小写敏感
            //Hangfire.SqlServer   sqlserver引用 大小写敏感

            //hangfire必须需要绑定一个持久化的连接数据。 官方推荐的是sqlserver,还有mg,mssql,pgsql,redis都是个人封装的
            //连接字符串必须加 Allow User Variables=true
            services.AddHangfire(x => x.UseStorage(new SqlServerStorage(
                Configuration["ConnectionString"],
                new SqlServerStorageOptions
                {
                    TransactionIsolationLevel = IsolationLevel.ReadCommitted, // 事务隔离级别。默认是读取已提交。
                    QueuePollInterval = TimeSpan.FromSeconds(15),             //- 作业队列轮询间隔。默认值为15秒。
                    JobExpirationCheckInterval = TimeSpan.FromHours(1),       //- 作业到期检查间隔(管理过期记录)。默认值为1小时。
                    CountersAggregateInterval = TimeSpan.FromMinutes(5),      //- 聚合计数器的间隔。默认为5分钟。
                    PrepareSchemaIfNecessary = true,                          //- 如果设置为true,则创建数据库表。默认是true。
                    DashboardJobListLimit = 50000,                            //- 仪表板作业列表限制。默认值为50000。
                    TransactionTimeout = TimeSpan.FromMinutes(1),             //- 交易超时。默认为1分钟。
                }
                )));

以上为SqlServer相关配置,MySql类型,区别为相关名称修改为MySql,如:SqlServerStorage→MySqlStorage,
SqlServerStorageOptions→MySqlStorageOptions

2.自定义配置hangfire面板 (在Startup.cs 的Configure)

简单引用如下:

 app.UseHangfireDashboard();   //使用hangfire面板
 app.UseHangfireServer();      //启动hangfire服务

若需要配置其详细信息,则配置如下:
原生的面板如果不指定路径。默认的进入面板的地址是 (端口号:/hangfire),支持自定义进入hangfire的路径
Hangfire.Dashboard.Authorization 包的自定义方法 (方法1):

 
            //添加面板的打开权限。不是所有人都可以打开面板。可以操作后台任务。
            app.UseHangfireDashboard("", new DashboardOptions
            {
               //方法1
               Authorization = new[]
               {
                 new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
                 {
                    SslRedirect = false,          // 是否将所有非SSL请求重定向到SSL URL
                    RequireSsl = false,           // 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL
                    LoginCaseSensitive = false,   //登录检查是否区分大小写
                    Users = new[]
                    {
                        new BasicAuthAuthorizationUser
                        {
                            Login ="ycz",//用户名
                            PasswordClear="123456"
                            // Password as SHA1 hash
                            //Password=new byte[]{ 0xf3,0xfa,,0xd1 }
                        }
                    }
                 })
               },
            
            });

方法2:

 
            //添加面板的打开权限。不是所有人都可以打开面板。可以操作后台任务。
            app.UseHangfireDashboard("", new DashboardOptions
            {
               //方法2
                Authorization = new[]
               {
                    new HangfireAuthorizationFilter(){}
               },
              
            });

方法2启用的自定义规则类 。需要重写 IDashboardAuthorizationFilter 的 Authorize 方法

     //默认是只能内网访问。 需要重写这个方法。注入规则
     public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
     {
 
          //这里写自定义规则
          public bool Authorize([NotNull] DashboardContext context)
          {
             if (context.Request.LocalIpAddress.Equals("127.0.0.1") || context.Request.LocalIpAddress.Equals("::1"))
                return true;
             else
                return false;
           }
     }

方法 1 是支持可视化界面的。 方法 2没有可视化界面但是开放了接口 IDashboardAuthorizationFilter 可以重写自定义规则
方法 1 和 方法 2 引用的包不一样,不可同时使用两种方法。需要注意
Hangfire.Dashboard.BasicAuthorization (方法1的包)
Hangfire.Dashboard.Authorization (方法2的包)

方法 1 和 方法 2 根据自己的需求。自行选择。
方法1 可视化界面 输入正确进入仪表盘。 输入错误会刷新界面 继续在当前登录页。
方法2 拦截器验证 通过验证直接进入仪表盘。 没通过验证返回 401