目录
什么是RPC框架,Dubbo又是什么,二者之间有什么联系
是不是说的有些抽象,那我们来说的通俗易懂点吧,这次你一定能听懂
简单举例
实际例子
真实场景demo(说了这么多,实际体会一下代码吧)
首先有这样的一个项目结构编辑
我们现在的consumer项目,想要去调用provider项目中某一个接口的服务
而consumer内部就需要发送一个http请求去获取这个provider项目中锁提供的服务,也就是先请求打到provider项目中的controller里再去调用它的service
在我们没有用其他工具的时候,我们就需要自己去构建一个httpConnect的工具,再去发送这样一个http的请求(http://localhost:8080/ provider/ service)
此时我们采用Dubbo的话,就会简便很多
什么是RPC框架,Dubbo又是什么,二者之间有什么联系
RPC框架是一种用于实现远程过程调用的软件框架。它提供了一套通信协议、编码/解码机制以及远程调用的功能,可以简化分布式系统中不同计算机之间的通信和调用过程。
Dubbo是一个开源的高性能RPC框架,最初由阿里巴巴公司开发并开源。它提供了一种基于Java语言的轻量级分布式服务框架,用于构建可扩展的、高性能的分布式应用程序。Dubbo在RPC的基础上,提供了更多的功能和特性,如服务注册与发现、负载均衡、容错机制等,使得分布式系统的开发和管理更加便捷。
因此,Dubbo可以被看作是一个完整的分布式服务框架,内部使用RPC来实现远程调用。它通过封装对底层通信协议的使用,提供了更高层次的抽象和功能,使得开发者能够更专注于业务逻辑的开发,而无需关心底层通信细节。
与传统的RPC相比,Dubbo具有以下特点:
1. 高性能:Dubbo采用了一些优化策略,如请求响应模式、线程池复用、自动扩容等,以提供高性能的服务调用能力。
2. 具备扩展机制:Dubbo提供了插件式的扩展机制,可以灵活地扩展和定制各个功能模块,如协议、负载均衡、容错等。
3. 服务治理:Dubbo提供了服务注册与发现、负载均衡、容错机制等功能,方便管理大规模分布式系统中的服务。
4. 配置化:Dubbo支持通过配置文件来定义服务的各项属性,使得服务的部署和配置更加便捷。
5. 应用监控:Dubbo内置了应用监控的功能,可以对服务进行性能统计和监控。
是不是说的有些抽象,那我们来说的通俗易懂点吧,这次你一定能听懂
简单举例
当我们在一个分布式系统中有多个计算机(或服务器)需要相互通信和协作时,RPC框架就像是一种通信的规则和工具。它定义了计算机之间如何传输数据、发送请求和接收响应等规范。
就好比你在一个公司的办公楼内,你需要向另一个同事借一本书。如果没有RPC框架,你可能需要自己走到对方的办公室,亲自向他表达你的请求,并等待他将书递给你。这样的过程非常繁琐,并且需要逐个解决每个人之间的通信问题。
而使用RPC框架,就像是在办公楼里安装了一个内部电话系统。你只需要拿起电话,拨打同事的座机号码并简单地告诉他你需要借书,然后他可以将书快速送到你的办公桌上。这样,整个借书的过程非常迅速而且便捷。
那么,Dubbo就是这样一种内部电话系统的框架。它在RPC的基础上提供了更多的功能,比如可以帮助你找到某位同事的座机号码(服务注册与发现),确保电话的稳定连接(负载均衡),以及在对方不在办公室时能够找到备用的人(容错机制)等。
实际例子
在现实世界中,我们可以将分布式的电商系统作为一个例子。这个系统包括了用户界面、商品服务、订单服务和支付服务等模块,它们分布在不同的服务器上。当用户在网页上点击购买按钮时,需要将购买请求发送到后台的商品服务,生成订单并进行支付。这个过程就需要使用RPC框架来进行不同模块之间的远程调用,以实现数据的传输和协调工作。(精髓就在于将没有部署到一台机器上的模块,能够通过网络实现互相之间的调用)
而Dubbo作为一个RPC框架,可以帮助这些不同的模块之间建立稳定的通信管道,实现商品服务和订单服务之间的远程调用。同时,Dubbo还提供了负载均衡机制来确保请求被均匀分配到多个服务器上,容错机制可以在某些服务器宕机时自动切换到备用服务器。
通过使用Dubbo这样的框架,开发人员可以更加专注于业务逻辑的实现,而无需过多关注底层的通信细节和管理问题,从而提高了开发效率和系统的稳定性。
真实场景demo(说了这么多,实际体会一下代码吧)
首先有这样的一个项目结构
我们现在的consumer项目,想要去调用provider项目中某一个接口的服务
而consumer内部就需要发送一个http请求去获取这个provider项目中锁提供的服务,也就是先请求打到provider项目中的controller里再去调用它的service
在我们没有用其他工具的时候,我们就需要自己去构建一个httpConnect的工具,再去发送这样一个http的请求(http://localhost:8080/ provider/ service)
这样做的缺点就是:
- 路径容易写错
- 路径修改的时候请求的路径也需要一个一个做出修改
- 得到请求之后的结果以后还需要自己去对结果反序列化,才能拿到对象
此时我们采用Dubbo的话,就会简便很多
我们只需要加上Dubbo所提供的Reference的这样一个注解,就可以将其他模块的服务自动注入
和直接用http去请求的区别就是——它不会经过controller这一层,直接调用的就是service接口所提供的方法
然后就相当于直接的调用了模块中的方法,而且不需要自己实现反序列化这个流程
只需要关系你调用的是哪个服务中的哪个方法
大概原理就是这样!!