第一次搭建.Net Core环境的Hnagfire项目,记录下自己的经验,有问题望大家多多指点。

一.创建项目,添加引用
1.新建.Net Core Web应用程序,选择Web应用程序

2.添加项目引用。

因本人使用的数据库为SQL Server,故引用NuGet包为 Hangfire.Sqlserver。若为MySql,则引用包为Hangfire.MySql.Core。

具体引用如下:
Hangfire.AspNetCore --Hangfire的组件的包
Hangfire.MySql.Core / Hangfire.Sqlserver --Hangfire的持久化数据库的包
–权限包分为2种 任选其一 依赖项不同请自行选择
Hangfire.Dashboard.Authorization --Hangfire的权限控制包 (依赖项是owin和hangfire.Core) (目前没找到可视化界面的方法)
Hangfire.Dashboard.BasicAuthorization --Hangfire被人二次封装的包。支持可视化界面的植入。支持core等

二、添加相关代码配置。
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=trueservices.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{//方法1Authorization = new[]{new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions{SslRedirect = false,          // 是否将所有非SSL请求重定向到SSL URLRequireSsl = false,           // 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSLLoginCaseSensitive = false,   //登录检查是否区分大小写Users = new[]{new BasicAuthAuthorizationUser{Login ="ycz",//用户名PasswordClear="123456"// Password as SHA1 hash//Password=new byte[]{ 0xf3,0xfa,,0xd1 }}}})},});

方法2:

 //添加面板的打开权限。不是所有人都可以打开面板。可以操作后台任务。app.UseHangfireDashboard("", new DashboardOptions{//方法2Authorization = 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;elsereturn false;}}

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

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

3.自定义配置hangfire服务

//配置要处理的队列列表 ,如果多个服务器同时连接到数据库,会认为是分布式的一份子。可以通过这个配置根据服务器性能的按比例分配请求,不会导致服务器的压力。不配置则平分请求var jobOptions = new BackgroundJobServerOptions{Queues = new[] { "test", "default" },//队列名称,只能为小写WorkerCount = Environment.ProcessorCount * 5, //并发任务数  --超出并发数。将等待之前任务的完成  (推荐并发线程是cpu 的 5倍)ServerName = "hangfire1",//服务器名称};app.UseHangfireServer(jobOptions); //启动hangfire服务

angfire的服务是可以自定义任务的分发的。因为框架是支持分布式,可以根据任务量根据服务器的性能选择性的根据优劣比重进行分配任务,不然默认是平分任务。

三、配置完成。
起服务。 ip:端口号/hangfire (没自定义面板配置是hangfire,不然是自己定义的路由)进入可视化面板


同时你的数据库里会创建11张表持久化你的任务

四、任务部署。
在Startup.cs 的Configure部署其相关任务,代码如下

RecurringJob.AddOrUpdate(() => Console.WriteLine($"APS.NET Core Hangfire"), Cron.Minutely(),TimeZoneInfo.Local);

Console.WriteLine($“APS.NET Core Hangfire”):代表需要执行的事件,可以自定义为个人方法
Cron.Minutely():代表每分钟执行一次,执行时间
TimeZoneInfo.Local:可以不添加,不填写则默认为UTC时间,添加表示按照北京时间

部署后页面如下

代码如图:

大致的使用如下,如果有什么不对的请大家多多指教。

.Net Core环境搭建Hangfire项目相关推荐

  1. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

  2. chatbot聊天机器人环境搭建以及项目运行指南

    项目地址 网传有一位程序员因忙于工作,无暇陪伴女友,便做了个聊天机器人的软件来陪女友聊天,然后自己就安心工作去了.等到程序员下班时一看,机器人已经和女友聊到了二胎的娃叫啥名了.博主不明觉厉,便去拷贝一 ...

  3. 基于阿里云服务器环境搭建到项目上线系列文章之三——安装git

    基于阿里云服务器环境搭建到项目上线系列 前言:最近购买了域名和一台阿里云服务器准备做点东西放上去,所以准备把环境搭建到项目上线的过程记录下来,计划一个系列6篇文章 基于阿里云服务器环境搭建到项目上线系 ...

  4. 基于阿里云服务器环境搭建到项目上线系列文章之六——项目部署

    基于阿里云服务器环境搭建到项目上线系列 前言:最近购买了域名和一台阿里云服务器准备做点东西放上去,所以准备把环境搭建到项目上线的过程记录下来,计划一个系列6篇文章 基于阿里云服务器环境搭建到项目上线系 ...

  5. 基于阿里云服务器环境搭建到项目上线系列文章之四——安装composer

    基于阿里云服务器环境搭建到项目上线系列 前言:最近购买了域名和一台阿里云服务器准备做点东西放上去,所以准备把环境搭建到项目上线的过程记录下来,计划一个系列6篇文章 基于阿里云服务器环境搭建到项目上线系 ...

  6. 基于阿里云服务器环境搭建到项目上线系列文章之一——putty使用秘钥登录远程服务器

    基于阿里云服务器环境搭建到项目上线系列 前言:最近购买了域名和一台阿里云服务器准备做点东西放上去,所以准备把环境搭建到项目上线的过程记录下来,计划一个系列6篇文章 基于阿里云服务器环境搭建到项目上线系 ...

  7. 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第二节:Cocos引擎开发环境搭建与项目创建!

    <使用Cocos2d-x 开发3D游戏>系列在线课程 第二节:Cocos引擎开发环境搭建与项目创建! 视频地址:http://edu.csdn.net/course/detail/1330 ...

  8. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  9. CGB2005 JT-1(jt概述 SqlYog 物理模型图PD 表结构 pom文件标签说明 jt环境搭建 创建项目2种,创建各种文件 idea导入,打包,删除项目,启动原理)

    注意事项: 1.京淘项目概述和动吧项目缺点描述 2.把sql文件导入数据库:通过SqlYog可视化工具或者Dos命令窗口. 3.SqlYog说明,和制作物理模型图的工具pd用发. 4.表结构学习 5. ...

最新文章

  1. 怎么查看电脑配置参数linux,linux下查看电脑配置
  2. 集成信息医院需要什么样的集成平台
  3. Android微信小程序原理,微信小程序事件流原理解析
  4. freemarker迭代list、map等常规操作
  5. SQLServer支持大内存方案(转载)
  6. 关于微信小程序swiper的问题
  7. thinkphp回调的php调用db类,请问thinkphp中model类自动完成功能 回调函数能不能获取其他字段的值?...
  8. 作者:​刘新海(1976-),男,博士,中国人民银行征信中心副研究员。
  9. jQuery Zoom 图片聚焦或者点击放大A plugin to enlarge images on touch, click, or mouseover
  10. rtk手簿Android代码,合众思壮手簿eSurveyAndroid连接cors账号教程
  11. 从运维角度浅谈MySQL数据库优化,中小企业DBA必会
  12. 话里话外:80后,那人生初始最关键的一步
  13. mysql 数据类型学习笔记(持续更新)
  14. 【数学建模】基于matlab贫困生评测系统【含Matlab源码 1744期】
  15. 【16年浙江省赛 B ZOJ 3937】More Health Points【树上dfs、斜率优化dp、动态维护下凸壳】
  16. 使用ubuntu内置桌面共享:vino,实现远程桌面
  17. iPhone 各屏幕尺寸整理
  18. Microsoft Access 数据库和表
  19. Python学习之路:列表(List)的append()、extend()与insert()方法
  20. Linux设置密码dictionary,Linux中修改密码出现it is based on a dictionary word解决方法

热门文章

  1. i3 1005g1和i5 10210u哪个好
  2. C++基础---三目运算符
  3. prompt tuning
  4. 线程同步的几种实现方法
  5. 链表练习(一元多项式):一元多项式采用带表头结点的单链表存放,用类C语言设计算法求一元多项式的值。
  6. 什么是java线程_Java多线程是什么意思?
  7. 华中科技大学计算机学院有调剂名额吗,华中科技大学计算机学院2017考研调剂信息...
  8. 深入理解原子操作-底层基础
  9. Swoole 从0开始搭建直播平台
  10. Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图