转自:http://blog.csdn.net/paul_wei2008/article/details/19355681
分布式服务框架:
–高性能和透明化的RPC远程服务调用方案
–SOA服务治理方案
-Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接
Dubbo缺省协议采用单一长连接和NIO异步通讯,
适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
分析源代码,基本原理如下:
- client一个线程调用远程接口,生成一个唯一的ID(比如一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的
- 将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object
- 向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)
- 将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去
- 当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。
- 服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket连接上专门监听消息的线程收到消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到callback对象里。
- 监听线程接着使用synchronized获取回调对象callback的锁(因为前面调用过wait(),那个线程已释放callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果了),至此,整个过程结束。
- 当前线程怎么让它“暂停”,等结果回来后,再向后执行?
- 正如前面所说,Socket通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在client server之间的socket连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?
答:使用一个ID,让其唯一,然后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪个线程的了。
相关推荐
**一、Dubbo的基本架构** Dubbo的核心组件包括服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)、监控中心(Monitor)和协议层(Protocol)。服务提供者暴露服务,服务消费者调用服务,注册中心负责...
通过深入学习和实践Dubbo源码,开发者不仅可以更好地理解Dubbo的工作原理,还能在实际项目中灵活运用,解决各种复杂的分布式服务问题。Dubbo的源码阅读也是一个不断提升自身技术深度的过程,有助于成长为更优秀的...
以上就是 Dubbo 的基本原理和一个简单的测试实例。通过这种方式,我们可以快速搭建起一个分布式服务架构,利用 Dubbo 的强大功能来实现服务的高可用、高性能和可扩展性。在实际项目中,还需要考虑更多的细节,例如...
总之,深入理解Spring与Dubbo的整合原理,不仅需要掌握两大框架的基本概念和功能,还需要对它们如何协同工作有深入的了解,包括配置、注解解析、服务治理和源码层面的交互。通过这样的学习,开发者能够更好地设计和...
了解了SPI的基本概念和Dubbo的实现后,我们可以进一步研究`笔记.docx`、`01_dubbo's_SPI原理.png`和`PPT.pptx`中的详细内容。这些文档可能包含了更多关于Dubbo SPI的实践案例、配置示例以及相关原理图解,帮助我们...
《Dubbo源码分析系列》是一份深入探讨Java开源...通过对《Dubbo源码分析系列》的学习,开发者不仅可以掌握Dubbo的基本使用,还能深入理解其设计思想,从而更好地在实际项目中应用和优化Dubbo,提高系统的稳定性和效率。
【Dubbo入门例子程序】是...通过这个【Dubbo入门例子程序】,你可以了解到Dubbo的基本工作原理和使用方法,为进一步学习和实践Dubbo打下基础。同时,这也是理解分布式系统、微服务架构以及RPC通信的一个很好的起点。
3. **Dubbo原理**:深入理解Dubbo的工作机制,包括服务注册与发现、负载均衡、容错机制(如Failsafe、Failover、Failfast、Failsafe、Fallback、Forced等)、调用链路监控等。这些原理有助于优化服务性能和稳定性。 ...
书中深入剖析了Dubbo的内部实现原理,如Remoting通信层的设计,包括Netty、MinAIO等网络库的使用,以及RPC协议的解析和处理流程。此外,还会涉及服务治理的高级特性,如动态配置、服务路由规则、集群策略(如广播、...
【深入理解Dubbo框架:从基本原理到模拟实践的全面解析】 远程过程调用(RPC)是分布式系统中的一种核心技术,它使得一个程序能够像调用本地方法一样调用远程机器上的程序。RPC协议允许不同地址空间的程序之间进行...
通过这个简单的Demo,你可以理解Dubbo的基本工作原理,包括服务的发布、订阅和调用流程。随着深入学习,你还可以探索更多高级特性,如负载均衡、熔断机制、监控等,以适应更复杂的分布式系统需求。 总结来说,这个...
通过这两本书的学习,开发者不仅可以掌握Dubbo的基本使用,还能深入理解其内部工作原理,从而在实际项目中更好地应用和定制Dubbo,提升微服务架构的设计和实施能力。对于Java开发者而言,这是一份宝贵的资源,能助其...
"dubbo-demo"是一个基础的Dubbo演示项目,旨在帮助开发者快速理解和掌握Dubbo的基本操作和核心概念。在这个项目中,我们可以看到一些关键的组成部分,包括服务提供者(Provider)、服务消费者(Consumer)、服务注册...
这本书深入讲解了Dubbo的内部工作原理,包括服务暴露、调用链路、RPC机制、服务治理策略(如熔断、降级、隔离)等核心组件。开发者可以从中学习到如何编写自定义的协议、过滤器、负载均衡器等,以满足特定业务需求。...
8. HelloWorld例子:通过一个简单的“HelloWorld”例子来演示Dubbo的基本使用方法,从而让初学者快速上手。 9. 核心机制分析:深入到Dubbo的源码中,分析其核心机制,包括设计模式的应用、Bean的加载、Spring可扩展...
【标题】"dubbo入门示例,zookeeper+dubbo-admin" 涉及到的核心技术是Dubbo和Zookeeper,这两个都...在实践中,开发者需要了解和掌握Spring整合Dubbo的方法,熟悉XML或注解方式的配置,以及Zookeeper的基本操作和原理。
在这个小例子中,我们将通过两个关键组件——`dubboconsumer`和`dubboprovider`来了解Dubbo的基本工作原理。 【dubboconsumer】这部分代码代表了服务消费者。在Dubbo中,服务消费者是需要调用远程服务的一方,它...
通过阅读《Dubbo官方中文文档》,开发者不仅可以掌握Dubbo的基本使用方法,还能了解到其背后的原理和最佳实践,从而在实际项目中更好地利用Dubbo提升系统的可扩展性和可靠性。无论是初学者还是经验丰富的开发者,这...
了解了RPC的基本原理后,我们来看看它在实际开发中的应用。使用RPC可以简化分布式系统的开发,因为开发者只需要关注业务逻辑,而无需关心底层通信细节。此外,Dubbo提供的服务治理功能,如服务注册与发现(Zookeeper...