2017年初的時候,因爲當時項目須要作了一個乞丐版定時調度系統,那時候只在單機上實現了核心的調度功能。作這個玩意以前也調研了社區中開源的解決方案,找了幾個實地部署試跑了一下,其實都很不錯。但那時候咱們有個問題就是應用都是基於Azure WebApp去部署,不太想爲了這個東西搞一臺虛擬機來跑windows服務,因此最後決定從新開發一個,哪怕功能簡單點能知足須要就行。html
很快這個東西就作好了也投入了使用,由於是給業務系統定製那裏面多少摻雜一些業務上的東西,那時候我就有了一個想法:把它剝離處理作成一個比較通用的系統打形成本身的開源項目。後來又對它作了一些升級優化,支持了多節點運行,作了一些界面展現。git
雖然那時候.Net Core已經出了正式版,但因爲以前的業務系統仍是使用.Net Framework開發,調度系統也並無選擇.Net Core。github
再後來,我就定了計劃路線:一個單機版和一個集羣版,單機版主要是部署簡單可是可用性比較低,集羣版支持多節點部署能夠保障高可用。因而說幹就幹,在工做之餘慢慢添磚加瓦,找UI搭架子,一行行代碼開始堆起來,又一遍遍重構(萬事開頭難)。到年末的時候由於一些緣由換工做了,接着整個18年都比較(忙)懶,基本處於停滯狀態沒什麼產出。一直到2019下半年,才下決心出一個版本。這時候剛好碰上.Net Core 3.0發佈,決定用Core重構一遍,也順便對.Net Core來一次實戰,因而就有了如今這個版本。web
持續近4年的Flag終於有了第一個Milestone。sql
傳送門:https://github.com/hey-hoho/ScheduleMasterCore編程
還有一個緣由選擇在3.0時重構,Framework中使用了
AppDomain
機制來實現程序集動態管理,.Net Core以前的版本沒有相似這種功能,直到3.0版本纔有了AssemblyLoadContext
提供這個能力。c#
當時想把這個項目搞的稍微(有逼格)正式一點,讓它看起來不那麼山寨,認認真真想了一個名字最後定爲ScheduleMaster。而後又去網上偷了一個icon(來自@ColinXu 的做品,在此感謝),用我撇腳的PS功底搗騰幾下作了logo,也算是正式出道了。後來上GitHub建立了Repository,更新了Description和ReadMe,添加了License,綁定了Azure DevOps,讓一切看起來都像個正兒八經的開源項目。windows
關於功能我想說的是,我一直提倡專業的工具幹專業的活,調度器就核心就是作調度,應該避免太多的業務操做,可以經過遠程調用(RPC)實現的業務就不要把一堆dll丟到調度器裏去跑。安全
除此以外,這套框架用來搭建中小型的web系統也是很是合適的。架構
Asp.Net Core 3.0、原生DI、EntityFramework Core 3.0、Mysql 5.七、Quartz.Net、BeyondAdmin、Jquery一把梭...
沒有任何高大上的玩意,盡顯
(低調奢華有內涵)樸實~
在此次重構過程當中現學現賣,寫了下面2篇文章:
之後再慢慢寫文章來介紹其餘的東西。
爲了讓總體架構有個清晰的展現,特地畫了下面這個圖,能夠看到也是很是簡單:
雖然很簡單,但在我接觸過Kubernetes後驚人地發現二者還挺類似,儘管Kubernetes要比我這個複雜的多。強行抱大腿😂😂
在GitHub項目主頁readme中作了簡單描述,部署上基本沒啥難度,更詳細的我後面再補文檔。
怎麼接入業務能夠參考源碼中的Demo項目,這裏簡單描述下。
添加引用
方式1,自行下載源碼編譯,手動添加引用Hos.ScheduleMaster.Base.dll
。
方式2,經過Nuget搜索ScheduleMaster
安裝。
public class MyTask : Hos.ScheduleMaster.Base.TaskBase { public override void Run(TaskContext context) { context.WriteLog($"當前時間是:{DateTime.Now}"); } }
先就這麼多~
仍是先立下Flag:基於.Net Core的這是一個核心版本,後面會一直更新下去,從此的開發計劃也在主頁readme作了描述。至於Framework上的版本,後面再說吧,若是當前這個石頭扔下去能激起一些水花,其餘版本也一併完善起來。畢竟俗務纏身,也並不是什麼技術大佬編程極客,須要時間去幹別的事。
固然了,有bug和優化點你們隨時砸過來:
有問題能夠加QQ羣交流:824535095
雖然再也不迷戀微軟,但仍是但願.net社區愈來愈好,盡微薄之力多參與多貢獻,衝鴨~