前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET Core开源任务调度框架Hangfire实战演练

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

作者头像
跟着阿笨一起玩NET
发布2021-02-02 14:54:27
2.4K0
发布2021-02-02 14:54:27
举报
文章被收录于专栏:跟着阿笨一起玩NET

一、需求背景

那么我们先回顾一下在上一节微课堂中我们抛出了的一个需求场景:用户购买车票后,在乘车日期前一个半小时和一个小时分别给用户发送一条微信乘车提醒通知。 这种需求我们可以进行横向的思维发散扩展开来,细想一下其实还是比较多场景的,比如因为系统中执行某一个具体业务操作点后需要在不定的时间段间延迟触发执行相应的具体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即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、需求背景
  • 二、Hangfire快速介绍
  • 三、为什么选择Hangfire,
  • 四、Hangfire运用落地实现
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档