這些天因為項目的需要基于Vert.x和PF4J做了一個簡單的插件式遠程服務(wù)框架dfx钧敞。它是一個非常簡單的小框架(或者稱為微框架也行)葵擎,其目的很簡單:快速地將老舊Java類轉(zhuǎn)變成為遠程服務(wù)谅阿,降低這類工作的難度和門檻。
簡單到什么程度呢?這么說吧:開發(fā)者只要實現(xiàn)一個指定的接口,然后將其打包成一個插件并復(fù)制到dfx指定的插件目錄之下就ok了(當然番挺,還需要修改對應(yīng)的配置文件)庶近。
至于為何選定Vert.x為支撐技術(shù),原因在我之前的踩坑記中已經(jīng)解答。而采用插件的原因則在于:
- 分工明確。插件開發(fā)者只需專注于業(yè)務(wù)邏輯的開發(fā),不用去為底層各種機制(如斷路器冠摄,你沒看錯,dfx管理下的插件天然就具有斷路器功能译打,而插件開發(fā)者根本就沒有意識到這一點耗拓!即使無意間引入了一個慢插件,也不會殃及其他插件奏司。)煩心乔询。
- 管理的需要。除了功能的擴展性韵洋,插件系統(tǒng)帶來的一個附加好處就是有效控制了整個系統(tǒng)的代碼竿刁。即黄锤,開發(fā)新功能時不需要將整個系統(tǒng)的代碼clone得到處都是。從代碼安全性上來講食拜,這無疑是絕佳的選擇鸵熟。同時,這還帶來了另一個好處:編譯速度的極大改善负甸。要是經(jīng)歷過編譯3天才得到一個二機制文件流强,那你應(yīng)該明白我在說什么,;)呻待。
對于插件系統(tǒng)打月,我選擇的是PF4J,一個小巧的插件實現(xiàn)蚕捉。
除了簡單和斷路器支持奏篙,dfx的還支持熱更新,只是目前的方式簡單粗暴:當發(fā)現(xiàn)任意一個變化(conf和插件目錄中zip包的變化)時迫淹,會重新加載整個服務(wù)秘通,即相當于重啟。
關(guān)于dfx的詳細使用和插件的開發(fā)敛熬,可以從它的README得到更多細節(jié)肺稀。