ASP.NET Core開(kāi)源任務(wù)調(diào)度框架Hangfire實(shí)戰(zhàn)演練
一、需求背景
接著上一篇文章《軟件需求分析和設(shè)計(jì)從0-1方法論,你真的掌握了嗎?》后臺(tái)有學(xué)員跟阿笨留言,還是需要具體了解一下最后的技術(shù)實(shí)現(xiàn)細(xì)節(jié)。那么我們先回顧一下在上一節(jié)微課堂中我們拋出了的一個(gè)需求場(chǎng)景:用戶(hù)購(gòu)買(mǎi)車(chē)票后,在乘車(chē)日期前一個(gè)半小時(shí)和一個(gè)小時(shí)分別給用戶(hù)發(fā)送一條微信乘車(chē)提醒通知。
這種需求我們可以進(jìn)行橫向的思維發(fā)散擴(kuò)展開(kāi)來(lái),細(xì)想一下其實(shí)還是比較多場(chǎng)景的,比如因?yàn)橄到y(tǒng)中執(zhí)行某一個(gè)具體業(yè)務(wù)操作點(diǎn)后需要在不定的時(shí)間段間延遲觸發(fā)執(zhí)行相應(yīng)的具體Job任務(wù)。(好好理解一下剛才阿笨說(shuō)的這句話,給你五分鐘的時(shí)候結(jié)合一下自己的實(shí)際工作場(chǎng)景)。。大家可以先自己獨(dú)立思考想一下,如果是你這樣的一個(gè)業(yè)務(wù)場(chǎng)景,你該怎么去設(shè)計(jì)和實(shí)現(xiàn),以及在這過(guò)程中需要注意的那些問(wèn)題點(diǎn)?
在文章中阿笨給大家?guī)追N技術(shù)實(shí)現(xiàn)方案,
方案一:數(shù)據(jù)庫(kù)定時(shí)輪詢(xún)。—基于數(shù)據(jù)庫(kù)消息隊(duì)列表方案。方案二、MQ延遲隊(duì)列。
方案三、定時(shí)調(diào)度job任務(wù)框架。
那今天微課堂阿笨將帶領(lǐng)大家基于我們推薦的方案三來(lái)來(lái)進(jìn)行講解,形成的最終的一個(gè)技術(shù)落地實(shí)現(xiàn)吧。
一位不知名的講師說(shuō)過(guò)有這么一句話:一個(gè)好的技術(shù)選型有時(shí)候真的可以更加簡(jiǎn)單、方便的解決我們實(shí)際中的復(fù)雜業(yè)務(wù)問(wèn)題。
二、Hangfire快速介紹
一般定時(shí)調(diào)度job任務(wù)框架,你也可以自己封裝實(shí)現(xiàn),也可以選擇開(kāi)源的有很多,那么今天的主角就是Hangfire。
Hangfire是一個(gè)開(kāi)源的.NET/.NET Core任務(wù)調(diào)度框架,提供了內(nèi)置集成化的控制臺(tái),可以直觀明了的查看作業(yè)調(diào)度情況,并且Hangfire不需要依賴(lài)于單獨(dú)的應(yīng)用程序執(zhí)行(如:windows服務(wù),window計(jì)劃)。并且支持持久性存儲(chǔ)。阿笨用自己的一句話總結(jié)Hangfire的特點(diǎn)就是:集成度高,持久化存儲(chǔ),簡(jiǎn)單不簡(jiǎn)約,非常棒棒棒。開(kāi)箱即用這難道不就是我們一直想要得到的自行車(chē)?
三、為什么選擇Hangfire
主要有亮點(diǎn)如下:
1)、可以通過(guò)程序的動(dòng)態(tài)根據(jù)指定的執(zhí)行計(jì)劃新增/創(chuàng)建我們的要執(zhí)行的具體Job任務(wù)。
2)、調(diào)度Job任務(wù)支持持久化存儲(chǔ),極大的保證系統(tǒng)的可用性。
四、Hangfire運(yùn)用落地實(shí)現(xiàn)
第一步:配置連接字符串,目前就是持久化我們的作業(yè)Job任務(wù),這里我們采用MS SQLSERVER,持久化方式有很多種數(shù)據(jù)庫(kù)支持,具體大家看一下官網(wǎng)。
關(guān)于連接字符串需要注意的是可以手動(dòng)單獨(dú)新創(chuàng)建一個(gè)用于專(zhuān)門(mén)存儲(chǔ)作業(yè)調(diào)度任務(wù)的Hangfire數(shù)據(jù)庫(kù),也可以使用現(xiàn)有存在的業(yè)務(wù)的數(shù)據(jù)庫(kù)。如果是不存在的數(shù)據(jù)庫(kù),記得一定要手動(dòng)在SQL SERVER中進(jìn)行創(chuàng)建噢。
阿笨個(gè)人的建議還是建議大家單獨(dú)新建一個(gè)獨(dú)立的Job數(shù)據(jù)庫(kù)也我們的業(yè)務(wù)數(shù)據(jù)庫(kù)進(jìn)行隔離吧。

第二步:Hangfire有多種執(zhí)行任務(wù)類(lèi)型,阿笨認(rèn)為其中有兩種類(lèi)型比較常用和重要。
1)、 固定式周期作業(yè)任務(wù)Job,意思就是每個(gè)周期都執(zhí)行。比如:每分鐘,l每小時(shí),每天等等這里執(zhí)行計(jì)劃。


2)、延遲性的作業(yè)任務(wù)Job,意思就是延遲時(shí)間執(zhí)行(這種任務(wù)只執(zhí)行一次就結(jié)束了)。比如:推遲一個(gè)小時(shí)執(zhí)行,到了指定固定的時(shí)間點(diǎn)才執(zhí)行。

第三步:關(guān)于方式hangifre的面板身份訪問(wèn)配置,可以自己根據(jù)指定的管理員root賬號(hào)訪問(wèn)Hangfire面板。

F5運(yùn)行后打開(kāi)hangfire后臺(tái)訪問(wèn)地址,http://localhost:36352/hangfire,輸入用戶(hù)名和密碼:root/123456即可。



五、源代碼示例下載
非常感謝對(duì)【跟著阿笨一起玩NET】的支持,有問(wèn)題微信公眾號(hào)回復(fù)wx關(guān)鍵字,加阿笨的個(gè)人微信號(hào)。
《ASP.NET Core開(kāi)源任務(wù)調(diào)度框架Hangfire實(shí)戰(zhàn)演練》源碼下載(注意下載地址區(qū)分大小寫(xiě)哦)
關(guān)注公眾號(hào)回復(fù)關(guān)鍵字提取碼:c3rl

騰訊課堂
網(wǎng)易云課堂
不信的話,掃一掃
