怎樣實現(xiàn)簡單的RPC框架,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)代縣,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):135182197921.定義上下文對象
在RpcContext對象中增加一個map類型的參數(shù)對象,可以存放任意擴展的參數(shù)。
2.RPC請求對象中增加上下文參數(shù)
RpcRequest增加如下字段,用于服務(wù)端調(diào)用。
3.RpcInvocation接口中增加上下文參數(shù)
在后續(xù)新增加的過濾器使用。
4.客戶端代理
RpcProxy在組裝RpcRequest對象時,從RpcContext中獲取最新的參數(shù)傳遞給RpcReuest,從而傳遞給服務(wù)端。
5.客戶端上下文過濾器
主要作用就是從本線線程變量中獲取參數(shù)傳遞給RpcInvocation。
6.服務(wù)端上下文過濾器
服務(wù)端上下文過濾器與客戶端的作用相反,是從RpcInvocation中獲取參數(shù)傳遞給本地線程變量RpcContext,后面在執(zhí)行服務(wù)端方法時就可以方便的通過RpcContext獲取指定變量。
7.過濾器排序
因為我們的RpcContext是個本地線程變量,而且Rpc服務(wù)端是多線程處理業(yè)務(wù),所以需要在請求結(jié)束后及時的清理掉相關(guān)本地線程變量信息。這就需要清理上下文的過濾動作在最后執(zhí)行,否則有會出現(xiàn)服務(wù)端方法還沒有執(zhí)行就被清空了參數(shù)。創(chuàng)建一個工具類,專門用來處理獲取客戶端以及服務(wù)端過濾器。增加order字段,升級排列。
8.過濾器工具類
創(chuàng)建ActiveFilterUtil,包含下面兩個函數(shù)。
(1)過濾器排序函數(shù),獲取特定注解的類,然后根據(jù)注解上的排序?qū)傩陨蚺判颉?/p>
(2)獲取RPC過濾器列表,提供給客戶端以及服務(wù)端的一個協(xié)助方法,便于客戶端以及服務(wù)構(gòu)建過濾器職責(zé)鏈。
9.客戶端以及服務(wù)端初始化
獲取過濾器map的邏輯改為調(diào)用上面ActiveFilterUtil.getFilterMap方法。
看完上述內(nèi)容,你們掌握怎樣實現(xiàn)簡單的RPC框架的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!