Dubbo概述–调用过程
写在前面
本文参考了Dubbo官方手册结合Dubbo2.6.1版本源码分析。推荐先阅读官方手册。
鉴于个人水平有限,如有不正确的地方请指出,欢迎一起讨论,谢谢!
调用过程
本过程的分析是基于最简单的Demo进行分析的,主要的目的是介绍架构和流程。
Consumer请求
Consumer调用ProxyFactory扩展类生成的代理类:ProxyN中的方法。
- ProxyFactory扩展点的默认类为JavassistProxyFactory
- ProxyN中的N代表本次启动创建的第N个代理,从0开始的AtomicLong静态变量
ProxyN类内部将调用方法转化为调用InvokerInvocationHandler提供的通用方法:invoke(obj, methodName, args)。
InvokerInvocationHandler将传入的methodName、args构造为RPCInvocation实例,并调用MockClusterInvoker的invoke(Invocation)方法。
- RPCInvocation实例可以理解为整个传输过程中的数据载体类,存储调用方法、参数类型、参数等
MockClusterInvoker根据Directory的URL确定调用方法时是否需要、怎样调用Mock,如果不是强制使用Mock则调用FailoverClusterInvoker的invoke方法。
- MockClusterInvoker是通过服务扩展功能中自动添加包装类(Cluster的包装类MockClusterWrapper)的机制添加进来的
- 没有methodName.mock参数则直接向下调用
- methodName.mock参数值以force开始时,直接使用mock而不会调用Provider
- methodName.mock参数值为其他时,只有调用Provider抛异常时才使用mo