項目源代碼地址git
在工做中咱們常常遇到爲app,h5, outside api 開發不一樣的前置系統,每每同一個業務邏輯須要開發三種api的形式,爲何要這樣呢?
它們只是報文格式,加解密需求,會話形式不一樣等等而已。github
因而開發了這個多終端前置系統,採用微內核模式封裝上述場景中通用流程,將其中一部分用接口開放出來。web
其中使用的開源框架以下:
使用springboot作集成,使用netty作web server,使用hystrix作熔斷器,使用redis作分佈式session,使用jmx作動態配置。
整個框架只作了最少的事情,其餘交給它將來的使用者們。redis
順便說一下:
使用者分爲兩種角色, 框架的二次開發者和具體業務邏輯開發者。spring
二次開發者須要關注通用流程中的開放接口,它們在:net.multi.terminal.bff.corejson
具體業務邏輯開發者須要關心如下路徑,它們是:net.multi.terminal.bff.service、net.multi.terminal.bff.modelapi
其中net.multi.terminal.bff.model是業務通用模型,它們是:請求,響應,會話 和 客戶端上下文springboot
前三個淺而易見,而客戶端上下文是什麼?咱們將不一樣的終端定義成不一樣的客戶端,並給它一個固定的ID,它所使用的個性化實現類被寫在multi-terminal-bff/src/main/resources/client-setting.jsonsession
[ { "clientId": "1", "serializerName":"AppMsgSerializer", "apiCodecName":"EmptyApiCodec", "sessionInjectorName":"AppSessionInjector", "rspContentType":"text/plain;charset=UTF-8" }, { "clientId": "2", "serializerName":"FormJsonMsgSerializer", "apiCodecName":"EmptyApiCodec", "sessionInjectorName":"WebSessionInjector", "rspContentType":"application/json;charset=UTF-8" }, { "clientId": "3", "serializerName":"DoubleJsonMsgSerializer", "apiCodecName":"EmptyApiCodec", "sessionInjectorName":"WebSessionInjector", "rspContentType":"application/json;charset=UTF-8" } ]
內容以下,很是通俗易懂,只要你認真看了這個類net.multi.terminal.bff.web.HttpApiHanler
沒錯,它描述了整個請求、處理、響應的過程。app
好了就寫到這吧,更多細節在代碼裏面,若是你在這個版本上有新的擴展請貢獻出來。