dubbo调用原理,过程(知其然,知其所以然)

简介:

前提是对NIO与zookpper有一定的理解

  • 1. dubbo暴露服务过程

duboo是用NIO异步通信的(不懂NIO自己去查,就知道dubbo为什么使用NIO,而不用IO了)。provider服务启动时候,在zookeeper注册节点处理请求,将结果返回给客户端。消费者在使用的时候,主要是订阅zookpeer节点,并对zookpper进行监听,provider有变化,zookeeper会推送给调用方,调用方重新缓存服务信息。服务方,消费方,zookpper三者之间都是长连接。

  1. 2.dubbo远程调用过程

  • client发出请求之后,会生成一个请求ID,requestID(唯一的,类似UUID),dubbo默认从0开始累加
  • 将调用方法信息打包(接口名称,方法名,参数),和处理结果回调对象callback,封装在一起组成一个对象object
  • 将调用信息放到Map里面map.put(ID,object)
  • 将ID和object组成一个connrequest对象,通过异步发送出去IOsession.write(connrequest)
  • 客户端从callbakc中获取服务端返回数据,若是获取不到,就调用wait方法,使线程处于等待状态
  • 服务器端首都请求处理之后,将结果返回和ID一起返回,客户端监听线程,监听服务端数据返回的,客户端监听到数据返回之后,通过ID,获取callback,将服务端返回的数据放到callback中
  • 这时候callback中有返回数据,客户端处于等待的线程被唤醒,从callback中通过get()方法获取服务端数据,至此整个过程基本就结束了(callback每次调用都会产生一个新的,不能共享)

(欢饮评论指正)


你可能感兴趣的:(dubbo调用原理,过程(知其然,知其所以然))