下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、rpcrpc是基于netty實(shí)現(xiàn)的javarpc框架,類似于dubbo。主要用于個(gè)人學(xué)習(xí),由漸入深,理解rpc的底層實(shí)現(xiàn)原理generic泛化調(diào)用說(shuō)明泛化接口調(diào)用方式主要用于客戶端沒(méi)有API接口及模型類元的情況,參數(shù)及返回值中的所有POJO勻用Map表示,通常用于框架集成,比如:實(shí)現(xiàn)一個(gè)通用的服務(wù)測(cè)試框架,可通過(guò)GenericService調(diào)用所有服務(wù)實(shí)現(xiàn)。GenericServicebarService=(GenericService)applicationContext.getBean("barService");Objectresult=barService.$inv
2、oke("sayHello",newString"java.lang.String",newObject"World");實(shí)現(xiàn)思路客戶端泛化調(diào)用個(gè)人感受不是很深,但是有一點(diǎn),當(dāng)沒(méi)有服務(wù)端接口的時(shí)候,也就無(wú)法通過(guò)反射獲取對(duì)應(yīng)的方法等原始信息。所以需要額外提供一個(gè)接口,并且可以獲取方法的相關(guān)屬性。服務(wù)端本次基本沒(méi)做處理。個(gè)人理解是客戶使用的時(shí)候自行定義實(shí)現(xiàn)類。客戶端實(shí)現(xiàn)接口/* 泛化調(diào)用接口* (1)接口直接使用dubbo的接口* 【應(yīng)用場(chǎng)景】* 泛接口實(shí)現(xiàn)方式主要用于服務(wù)器端沒(méi)有API接口及模型類元的情況,參數(shù)及返回值中的所有POJO均
3、用Map表示,通常用于框架集成,比如:實(shí)現(xiàn)一個(gè)通用的遠(yuǎn)程服務(wù)Mock框架,可通過(guò)實(shí)現(xiàn)GenericService接口處理所有服務(wù)請(qǐng)求。* 【服務(wù)端】* 服務(wù)端代碼不需要做任何調(diào)整。* 客戶端泛化調(diào)用進(jìn)行相關(guān)調(diào)整即可。* 【客戶端】* authorbinbin.hou* since0.1.2* /publicinterfaceGenericService/*Genericinvocation* parammethodMethodname,e.g.findPerson.Ifthereareoverriddenmethods,parameterinfois* required,e.g.findPer
4、son(java.lang.String)* paramparameterTypesParametertypes* paramargsArguments* returninvocationreturnvalue* throwsGenericExceptionpotentialexceptionthrownfromtheinvocation* /Object$invoke(Stringmethod,StringparameterTypes,Objectargs)throwsGenericException;默認(rèn)實(shí)現(xiàn)默認(rèn)的實(shí)現(xiàn),其實(shí)和基于接口的動(dòng)態(tài)代理非常的類似。這種實(shí)現(xiàn)只需要在用戶指定為gene
5、ric的時(shí)候,使用這個(gè)實(shí)現(xiàn)即可。/* 泛化調(diào)用* authorbinbin.hou* since0.1.2*/publicclassGenericReferenceProxyimplementsGenericServiceprivatestaticfinalLogLOG=LogFactory.getLog(GenericReferenceProxy.class);/* 代理上下文* (1)這個(gè)信息不應(yīng)該被修改,應(yīng)該和指定的service緊密關(guān)聯(lián)* since0.1.3* /privatefinalServiceContextproxyContext;/*遠(yuǎn)程調(diào)用接口since0.1.3*/pr
6、ivatefinalRemoteInvokeServiceremoteInvokeService;publicGenericReferenceProxy(ServiceContextproxyContext,RemoteInvokeServiceremoteInvokeService)xyContext=proxyContext;this.remoteInvokeService=remoteInvokeService;©OverrideSuppressWarnings("unchecked")publicObject$invoke(Stringme
7、thod,StringparameterTypes,Objectargs)throwsGenericException/構(gòu)建基本調(diào)用參數(shù)finallongcreateTime=Times.systemTime();ObjectactualArgs=newObjectmethod,parameterTypes,args;DefaultRpcRequestrpcRequest=newDefaultRpcRequest();rpcRequest.serviceld(proxyContext.serviceld();rpcRequest.createTime(createTime);newArrayL
8、ist(););););rpcRequest.paramValues(actualArgs);List<String>paramTypeNames=Guavas.paramTypeNames.add("java.lang.String"paramTypeNames.add("Ljava.lang.String;"paramTypeNames.add("Ljava.lang.Object;"rpcRequest.paramTypeNames(paramTypeNames);rpcRequest.methodName(&quo
9、t;$invoke");rpcRequest.returnType(Object.class);/proxyContext中應(yīng)該是屬于當(dāng)前service的對(duì)應(yīng)信息。/每一次調(diào)用,對(duì)應(yīng)的invoke信息應(yīng)該是不通的,需要?jiǎng)?chuàng)建新的對(duì)象去傳遞信息/rpcRequest因?yàn)橐婕暗骄W(wǎng)絡(luò)間傳輸,盡可能保證其簡(jiǎn)潔性。DefaultRemotelnvokeContextcontext=newDefaultRemotelnvokeContext();context.request(rpcRequest);context.traceld(Ids.uuid32();context.retryTimes(
10、2);context.serviceProxyContext(proxyContext);context.remotelnvokeService(remotelnvokeService);/3,執(zhí)行遠(yuǎn)程調(diào)用returnremotelnvokeService.remotelnvoke(context);)測(cè)試代碼注冊(cè)中心啟動(dòng)客戶端?指定配置為generic使用GenericService接口直接調(diào)用publicstaticvoidmain(String口args)/服務(wù)配置信息ReferenceConfig<GenericService>config=ClientBs.newInst
11、ance();config.serviceId(ServiceIdConst.GENERIC);config.serviceInterface(GenericService.class);config.subscribe(true);config.registerCenter(ServiceIdConst.REGISTER_CENTER);config.generic(true);GenericServicegenericService=config.reference();genericService.$invoke("hello",newString"name
12、",newObject口"123");服務(wù)端?測(cè)試代碼這個(gè)FooGenericService實(shí)現(xiàn)非常簡(jiǎn)單,只是輸出對(duì)應(yīng)的參數(shù)信息publicstaticvoidmain(Stringargs)/啟動(dòng)服務(wù)ServiceBs.getInstance().register(ServiceIdConst.GENERIC,newFooGenericService().registerCenter(ServiceIdConst.REGISTER_CENTER).expose();服務(wù)端日志信息INFO2019-11-0122:53:12,316nioEventLoopGrou
13、p-3-1c.g.h,r,s.h.RpcServerHandler.channelRead0-Serverchannelreadstart:502b73fffec4485c-000019fc-00000002-bd2c76df8b24bcd4-e2e8065aINFO2019-11-0122:53:12,317nioEventLoopGroup-3-1c.g.h,r,s.h.RpcServerHandler.channelRead0-Serverreceivechannel502b73fffec4485c-000019fc-00000002-bd2c76df8b24bcd4-e2e8065ar
14、equest:DefaultRpcRequestseqId='4afb085e10b94063ad4b6e46aa617fcd',createTime=1572619992279,serviceId='generic',methodName='$invoke',paramTypeNames=java.lang.String,Ljava.lang.String;,Ljava.lang.Object;,paramValues=hello,Ljava.lang.String;11e7ee7,Ljava.lang.Object;c69f46,return
15、Type=classjava.lang.ObjectINFO2019-11-0122:53:12,319nioEventLoopGroup-3-1c.g.h.r.c,s.g.i.FooGenericService.$invoke-Genericmethod:helloINFO2019-11-0122:53:12,319nioEventLoopGroup-3-1c.g.h.r.c,s.g.i.FooGenericService.$invoke-GenericparameterTypes:nameINFO2019-11-0122:53:12,320nioEventLoopGroup-3-1c.g.h.r.c,s.g.i.FooGenericService.$invoke-Genericargs:123INFO2019-11-0122:53
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版煤礦股權(quán)轉(zhuǎn)讓與礦山資源綜合利用協(xié)議4篇
- 2025年水果種植與鄉(xiāng)村旅游融合發(fā)展合作協(xié)議范本3篇
- 2025年度教育培訓(xùn)設(shè)施租賃合同模板2篇
- 2025年消防設(shè)備更換與系統(tǒng)調(diào)試服務(wù)合同3篇
- 2025年度個(gè)人二手車轉(zhuǎn)讓及車輛置換服務(wù)協(xié)議4篇
- 2025年度文化遺產(chǎn)保護(hù)慈善捐贈(zèng)合作協(xié)議范本4篇
- 2025年度光伏發(fā)電站配電箱供應(yīng)與維護(hù)服務(wù)協(xié)議4篇
- 2025年度物流公司貨車司機(jī)聘用合同修訂版
- 二零二五年度觸控技術(shù)成果轉(zhuǎn)化合同4篇
- 2025版面粉原料采購(gòu)與倉(cāng)儲(chǔ)物流合同4篇
- 2024年縣鄉(xiāng)教師選調(diào)進(jìn)城考試《教育學(xué)》題庫(kù)及完整答案(考點(diǎn)梳理)
- 車借給別人免責(zé)協(xié)議書(shū)
- 河北省興隆縣盛嘉恒信礦業(yè)有限公司李杖子硅石礦礦山地質(zhì)環(huán)境保護(hù)與治理恢復(fù)方案
- 第七章力與運(yùn)動(dòng)第八章壓強(qiáng)第九章浮力綜合檢測(cè)題(一)-2023-2024學(xué)年滬科版物理八年級(jí)下學(xué)期
- 醫(yī)療機(jī)構(gòu)診療科目名錄(2022含注釋)
- 微視頻基地策劃方案
- 光伏項(xiàng)目質(zhì)量評(píng)估報(bào)告
- 八年級(jí)一本·現(xiàn)代文閱讀訓(xùn)練100篇
- 2023年電池系統(tǒng)測(cè)試工程師年度總結(jié)及下一年計(jì)劃
- 應(yīng)急預(yù)案評(píng)分標(biāo)準(zhǔn)表
- 《既有建筑結(jié)構(gòu)安全監(jiān)測(cè)技術(shù)標(biāo)準(zhǔn)》(征求意見(jiàn)稿)及條文說(shuō)明
評(píng)論
0/150
提交評(píng)論