Dubbo客户端原理

服务请求的基本原理

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(),唤醒前面处于等待状态的线程继续执行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章