ReferenceConfig.get()返回的是一个代理类,并且方法拦截器为InvokerInvocationHandler,所以当消费方调用服务的接口方法后会被InvokerInvocationHandler拦截
image.png
此时返回一个RpcInvocation,method就是要调用的方法,args就是传的真是参数
这个RpcInvocation回一直传递下去
最后调用到DubboInvoker的doInvoker()使用NettyClient与服务端进行交互
image.png
程序首先使获取远程调用Client,然后判断调用是否为异步调用、是否请求响应,需要说明的是,在配置RegerenceConfig时如果是异步需要设置async=true,因为这里会用到
image.png
如果请求不需要响应结果则直接使用远程Client发起请求调用,然后将RpcContext上下文的future设置为null,返回空的RpcResult
如果请求是异步请求,则保存远程Client发起请求后返回的future对象,并且设置到RpcContext上下文中,这样,调用方就可以通过RpcContext上下文获取改future。
如果请求为同步请求,则首先设置RpcContext上下文中的future对象为null,然后使用远程Client发起请求,然后在返回的future对象上调用get()方法,以同步等待远程调用结果的返回。
image.png
网友评论