分布式服务框架:
高性能和透明的RPC远程服务调用SOA服务管理方案Apache MINA框架基于Reactor模型通信框架,基于tcp长连接Dubbo缺省协议采用单个长连接和NIO异步通信
分析源代码,基本原理如下。
客户端线程调用远程接口并生成唯一的ID。 例如,随机字符串、UUID等。 Dubbo应该使用AtomicLong从0开始累计数字的封装方法调用信息(如调用的接口名称、方法名称和参数值的列表),以及处理结果的回调对象callback 构成对象的object是专用于调用信息的全局ConcurrentHashMap中的put(ID, object )将id和打包的方法调用信息封装在对象connRequest中,使用iosession.write(connrequest )异步发送到当前线程,然后调用回退的gegest get ) )内部,则使用同步获取要回调的callback的锁定,并检测是否获取了结果。 如果未获取,则服务端接收并处理请求后,将结果(此结果中包含前面的ID,即回复)发送到客户端,在客户端的套接字连接上接收消息,分析结果并获取ID, 然后,从上一个ConcurrentHashMap获取get(id )以找到callback,并将方法调用结果设置为calllback的监听线程使用synchronized在回调对象的callback中查找该线程已释放对callback的锁定),并且notifyAll )、继续运行(调用之前等待的线程并继续运行(调用的get ) )方法将得到调用结果) http://
答:老师变成一个对象obj,在一个全局map中存储put(id,obj ),通过同步获取obj锁,调用obj.wait ) )使当前线程处于待机状态,然后
当前线程怎么让它“暂停”,等结果回来后,再向后执行?
a )通过使用ID唯一地传递给服务端,然后由服务端回复,可以知道结果是原哪个线程的。
用简洁的图来说明最重要的两种Invoker吧。 服务提供Invoker和服务消费Invoker。
转载: https://blog.csdn.net/Paul _ Wei 2008/article/details/19355681