Dubbo源代码分析之远程调用过程.pdf

Dubbo源代码分析之远程调用过程.pdf

ID:52450128

大小:510.59 KB

页数:16页

时间:2020-03-27

Dubbo源代码分析之远程调用过程.pdf_第1页
Dubbo源代码分析之远程调用过程.pdf_第2页
Dubbo源代码分析之远程调用过程.pdf_第3页
Dubbo源代码分析之远程调用过程.pdf_第4页
Dubbo源代码分析之远程调用过程.pdf_第5页
资源描述:

《Dubbo源代码分析之远程调用过程.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Dubbo的RPC调用过程解析说明:该文档分析了Dubbo框架中RPC调用的整个流程,并基于源代码按照执行时序进行说明。涉及的关键点包括:Directory、路由、负责均衡、集群容错、过滤器Filter以及监控模块等。可以作为Dubbo框架二次开发的参考。RPC调用在客户端(即Consumer端)触发,其配置文件applicationContext.xml文件中会有如下的定义:这一行定义会为服务接

2、口xxx.xxx.Service在本地生成一个远程代理,在Dubbo中这个代理用com.alibaba.dubbo.common.bytecode.proxy0的实例来表示,另外,由于这个代理存在于本地,因此就可以像本地bean一样调用该服务,具体的通信过程由代理负责。这个代理实例中仅仅包含一个handler对象(InvokerInvocationHandler类的实例),handler中则包含了RPC调用中非常核心的一个接口Invoker的实现,Invoker接口的的的定义如下:publicinterfac

3、eInvokerextendsNode{ClassgetInterface();//调用过程的具体表示形式Resultinvoke(Invocationinvocation)throwsRpcException;}Invoker接口的核心方法是invoke(Invocationinvocation),方法的参数Invocation是一个调用过程的抽象,也是Dubbo框架的核心接口,该接口中包含如何获取调用方法的名称、参数类型列表、参数列表以及绑定的数据,定义代码如下:publicinterface

4、Invocation{//调用的方法名称StringgetMethodName();//调用方法的参数的类型列表Class[]getParameterTypes();//调用方法的参数列表Object[]getArguments();//调用时附加的数据,用map存储MapgetAttachments();//根据key来获取附加的数据StringgetAttachment(Stringkey);//getAttachment(Stringkey)的拓展,支持默认值获取Strin

5、ggetAttachment(Stringkey,StringdefaultValue);//获取真实的调用者实现InvokergetInvoker();}Invocation接口和Invoker接口是配套使用的,二者相互依存,从Invoker的调用方法定义invoke(Invocationinvocation)就可以看出这一点。如果是RPC调用时,Invocation的具体实现就是RPCInvocation,该方法会抛出RpcException,该异常意味着调用失败,代理中的handler实例中

6、包含的Invoker接口实现者是MockClusterInvoker,其中MockClusterInvoker仅仅是一个Invoker的包装,并且也实现了接口Invoker,其只是用于实现Dubbo框架中的mock功能,我们可以从他的invoke方法的实现中看出,代码如下:publicResultinvoke(Invocationinvocation)throwsRpcException{Resultresult=null;/*这一行代码用于获取该服务是否提供mock功能,如果提供,则url中会包含mo

7、ck关键字*/Stringvalue=directory.getUrl().getMethodParameter(invocation.getMethodName(),Constants.MOCK_KEY,Boolean.FALSE.toString()).trim();if(value.length()==0

8、

9、value.equalsIgnoreCase("false")){//没有mock的过程,直接调用result=this.invoker.invoke(invocation);}elseif(value.

10、startsWith("force")){//日志记录代码部分省略//force:directmock,这里用于处理强制mock的情况,不执行远程调用result=doMockInvoke(invocation,null);}else{//fail-mock,这里处理失败后mock的情况,即出现调用异常时执行mocktry{result=this.invok

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。