当前位置: 代码迷 >> 综合 >> Dubbo客户端原理
  详细解决方案

Dubbo客户端原理

热度:103   发布时间:2023-10-25 10:01:12.0

服务请求的基本原理

1、client一个线程调用远程接口,生成一个唯一的ID,Dubbo是使用AtomicLong从0开始累计数字。

2、将打包的方法调用信息和处理结果的回调对象callback,全部封装在一起,组成一个对象。

3、向全局ConcurrentHashMap里面put(ID, object)。

4、将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去。

5、当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。

6、服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket连接上专门监听消息的线程收到消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到callback对象里。

7、监听线程接着使用synchronized获取回调对象callback的锁,再notifyAll(),唤醒前面处于等待状态的线程继续执行。