宣布!哈迪斯(hades)項目開始連載!
上周透露了我會寫一個新項目,現(xiàn)在我決定好了項目名,是時候來宣布一下啦。
給自己里個KPI吧,在Q2寫完這個項目,到時候希望能拿3.75
這個新項目名為:hades(哈迪斯),它如果成型了以后,一般會被叫做「規(guī)則引擎」
Gitee鏈接:https://gitee.com/zhongfucheng/hades
GitHub鏈接:https://github.com/ZhongFuCheng3y/hades
去年給大家聊austin的時候,吹了一個功能,但遲遲沒有實現(xiàn),不知道大家還有沒印象。
商務(wù)又找到了便宜的短信渠道了,接入一下看看效果吧?這可是實打?qū)嵤″X的啊!每次寫一個類(接入短信就相當于寫一個類),我都要重啟發(fā)布上線嗎?這不靠譜吧?
解決方案:上規(guī)則引擎將業(yè)務(wù)代碼抽離,無須上下線即可實現(xiàn)功能。

結(jié)果,一年多過去了,我這個功能還沒實現(xiàn)…文章一直放在歷史列表里,以至于時不時就有人跑來問我這個實現(xiàn)了沒,我都以這不是核心流程給推脫了。
我是想實現(xiàn)這個功能的,我以各種的關(guān)鍵詞,都沒在Git找到合適的輪子去接入,找了好久咯,結(jié)果就是一直擱置了。一般在網(wǎng)上搜規(guī)則引擎,很可能你會搜到Drools(學習成本有點大),或者會搜到流程編排引擎(但是會帶有一丟丟規(guī)則的味道)。
而我的目標是很明確的:借助groovy做的規(guī)則引擎是最合適的,這對Java開發(fā)相當于0學習成本。
有的人可能會好奇:你又說網(wǎng)上沒什么現(xiàn)成的輪子,那你為啥會知道這玩意啊?
因為我在前司用過這種輪子,確實是很好用,很適合用規(guī)則引擎寫一些改動比較多的的邏輯,之前做過的流量系統(tǒng)和消息推送平臺都有過實際應(yīng)用場景。
初用時,會覺得很驚艷!剛畢業(yè)時還特意看下公司里的規(guī)則引擎究竟是怎么實現(xiàn)的,為什么能做到不發(fā)布應(yīng)用,新的邏輯就能實時生效。后來看xxl-job的時候,發(fā)現(xiàn)xxl-job的Java GULE其實上也是依賴Groovy去做的。
曾經(jīng)我還把這個規(guī)則引擎的原理結(jié)合我的面試,在《對線面試官系列》中分享過。
有專門后臺對腳本進行管理,然后會把腳本寫到「分布式配置中心」(實時刷新),客戶端監(jiān)聽「分布式配置中心」所存儲的腳本是否有改動
如果存在改動,則通過Groovy類加載器重新編譯并加載腳本,最后放到Spring容器對外使用

這次我暫定是會把數(shù)據(jù)庫給砍掉,只依賴分布式配置中心,會用nacos和apollo這兩種實現(xiàn)分別打成二方庫。砍了數(shù)據(jù)庫和后臺管理會少了很多自定義個性化的邏輯,不過項目就會很輕量級。
我在寫austin的時候,老是有人說我的項目太重了,他們只是想要一個簡單的發(fā)送各種消息的jar包,我給他們的卻是一個需要部署的應(yīng)用。
而這一次,hades最后能給到大家用的,就是一個jar包。當你項目用的是apollo作為分布式配置中心時,那就引入apollo-starter,當你項目用的是nacos作為分布式配置中心時,那就引入nacos-starter。
通過在配置中心的后臺改改點點,就能實現(xiàn)不重啟項目代碼,修改了線上的邏輯!
我預(yù)估這項目的代碼量不會太大,實現(xiàn)的過程應(yīng)該也挺快的,目前已經(jīng)簡單地調(diào)通了流程(nacos/example)。后面等我慢慢迭代和更新吧,有進展再跟大家匯報下。
Gitee鏈接:https://gitee.com/zhongfucheng/hades
GitHub鏈接:https://github.com/ZhongFuCheng3y/hades
