ASP.NET Core开源任务调度框架Hangfire实战演练

一、需求背景

接着上一篇文章《软件需求分析和设计从0-1方法论,你真的掌握了吗?》后台有学员跟阿笨留言,还是需要具体了解一下最后的技术实现细节。那么我们先回顾一下在上一节微课堂中我们抛出了的一个需求场景:用户购买车票后,在乘车日期前一个半小时和一个小时分别给用户发送一条微信乘车提醒通知。

这种需求我们可以进行横向的思维发散扩展开来,细想一下其实还是比较多场景的,比如因为系统中执行某一个具体业务操作点后需要在不定的时间段间延迟触发执行相应的具体Job任务。(好好理解一下刚才阿笨说的这句话,给你五分钟的时候结合一下自己的实际工作场景)。。大家可以先自己独立思考想一下,如果是你这样的一个业务场景,你该怎么去设计和实现,以及在这过程中需要注意的那些问题点?

在文章中阿笨给大家几种技术实现方案,

方案一:数据库定时轮询。———基于数据库消息队列表方案。

方案二、MQ延迟队列。

方案三、定时调度job任务框架。

那今天微课堂阿笨将带领大家基于我们推荐的方案三来来进行讲解,形成的最终的一个技术落地实现吧。

一位不知名的讲师说过有这么一句话:一个好的技术选型有时候真的可以更加简单、方便的解决我们实际中的复杂业务问题。

二、Hangfire快速介绍

一般定时调度job任务框架,你也可以自己封装实现,也可以选择开源的有很多,那么今天的主角就是Hangfire。

Hangfire是一个开源的.NET/.NET Core任务调度框架,提供了内置集成化的控制台,可以直观明了的查看作业调度情况,并且Hangfire不需要依赖于单独的应用程序执行(如:windows服务,window计划)。并且支持持久性存储。

阿笨用自己的一句话总结Hangfire的特点就是:集成度高,持久化存储,简单不简约,非常棒棒棒。开箱即用这难道不就是我们一直想要得到的自行车?

三、为什么选择Hangfire,

主要有亮点如下

1)、可以通过程序的动态根据指定的执行计划新增/创建我们的要执行的具体Job任务。
2)、调度Job任务支持持久化存储,极大的保证系统的可用性。

四、Hangfire运用落地实现

第一步:配置连接字符串,目前就是持久化我们的作业Job任务,这里我们采用MS SQLSERVER,持久化方式有很多种数据库支持,具体大家看一下官网。

关于连接字符串需要注意的是可以手动单独新创建一个用于专门存储作业调度任务的Hangfire数据库,也可以使用现有存在的业务的数据库。如果是不存在的数据库,记得一定要手动在SQL SERVER中进行创建噢。

阿笨个人的建议还是建议大家单独新建一个独立的Job数据库也我们的业务数据库进行隔离吧。

第二步:Hangfire有多种执行任务类型,阿笨认为其中有两种比较常用和重要。

1)、  固定式周期作业任务Job,意思就是每个周期都执行。比如:每分钟,每小时,每天等等这里执行计划。

2)、延迟性的作业任务Job,意思就是延迟时间执行(这种任务只执行一次就结束了)。比如:推迟一个小时执行,到了指定固定的时间点才执行。

第三步:关于方式hangifre的面板身份访问配置,可以自己根据指定的管理员root账号可以访问Hangfire面板。

 F5运行后打开hangfire后台访问地址,http://localhost:36352/hangfire,输入用户名和密码:root/123456即可。

五、源代码示例下载

扫码关注下方微信公众号,回复c3rl关键字获取源代码下载地址。

有问题微信公众号回复wx关键字,加阿笨的个人微信号。

作者:阿笨

      【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558跟着阿笨一起玩NET

      【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616跟着阿笨一起玩C#

      【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586跟着阿笨一起玩ASP.NET

      【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:806491485Asp.Net Core跨平台技术开

      【官方QQ五群:.NET Core跨平台开发技术(可加入)】:1036896405.NET Core跨平台开发技术

      【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628

      【腾讯课堂】:https://abennet.ke.qq.com

      【51CTO学院】:https://edu.51cto.com/sd/66c64

      【微信公众号】:http://dwz.cn/ABenNET

原文地址:https://www.cnblogs.com/51net/p/14337140.html