Spring Cloud框架集之Dubbo(RPC 分布式服务框架)
Spring Cloud框架集之Dubbo(RPC 分布式服务框架)
Dubbo概述
什么是RPC
RPC是Remote Procedure Call的缩写 翻译为:远程过程调用
目标是为了实现两台(多台)计算机\服务器,互相调用方法\通信的解决方案
RPC的概念主要定义了两部分内容
1.序列化协议
2.通信协议
为了方便大家理解RPC,下面的图片帮助理解
上面图是老婆和老公在家的时,老婆让老公洗碗的调用流程
但这个流程是本地的,
我们再换成远程调用的图片
通信协议
通信协议指的就是远程调用的通信方式
再上面图片调用中,老婆使用手机信息的方法通知老公去洗碗
实际上这个通知的方式可以有多种
例如:写信,飞鸽传书,闪送等等
序列化协议
序列化协议指通信内容的格式,双方都要理解这个格式
上面的图片中,老婆给老公发信息,一定是双方都能理解的信息
发送信息是序列化过程,接收信息需要反序列化
什么是Dubbo
理解了RPC再学习Dubbo就会简单一些了
Dubbo是一套RPC框架。既然是框架,我们可以在框架结构高度,定义Dubbo中使用的通信协议,使用的序列化框架技术,而数据格式由Dubbo定义,我们负责配置之后直接通过客户端调用服务端代码。
简单来说,Dubbo就是RPC概念的实现
Dubbo是Spring Cloud Alibaba提供的一个框架
能够实现微服务项目的互相调用
Dubbo的发展历程
2012年底dubbo停止更新后到2017年dubbo继续更新之前
2015SpringCloud开始兴起,当时没有阿里的框架
国内公司要从SpringCloud和Dubbo中抉择使用哪个微服务方案
在2012年dubbo停止更新后国内的当当网在dubbo的基础上开发了dubboX框架,并进行维护
2019年后,SpringCloud和Dubbo才能共同使用
Dubbo的协议支持
RPC框架分通信协议和序列化协议
Dubbo框架支持多种通信协议和序列化协议,可以通过配置文件进行修改
支持的通信协议有
-
dubbo协议(默认)
-
rmi协议
-
hessian协议
-
http协议
-
webservice
-
.....
支持的序列化协议
-
hessian2(默认)
-
java序列化
-
compactedjava
-
nativejava
-
fastjson
-
dubbo
-
fst
-
kryo
Dubbo默认情况下,协议的特征如下
-
采用NIO单一长连接
-
优秀的并发性能,但是大型文件的处理差
-
Dubbo开发简单,有助于提升开发效率
Dubbo服务的注册与发现
在Dubbo的调用过程中,必须包含注册中心的支持
注册中心推荐使用Nacos,但是如果使用其他软件也能实现例如(Redis,zookeeper等)
服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。
上面的示例中,老婆就是服务器的发现者,它能够获取老公的所有功能列表
老婆一旦调用老公的服务就完成了Dubbo的调用
consumer 服务的消费者,指服务的调用者(使用者)也就是老婆的位置
provider 服务的提供者,指服务的拥有者(生产者)也就是老公的位置
在Dubbo中,远程调用依据是服务的提供者在Nacos中注册的服务名称
一个服务名称,可能有多个运行的实例,任何一个空闲的实例都可以提供服务
常见面试题:Dubbo的注册发现流程
1.首先服务的提供者启动服务到注册中心注册,包括各种ip端口信息,Dubbo会同时注册该项目提供的远程调用的方法
2.服务的消费者(使用者)注册到注册中心,订阅发现
3.当有新的远程调用方法注册到注册中心时,注册中心会通知服务的消费者有哪些新的方法,如何调用的信息
4.RPC调用,在上面条件满足的情况下,服务的调用者无需知道ip和端口号,只需要服务名称就可以调用到服务提供者的方法
Dubbo实现微服务调用
确定调用关系
配置Dubbo
<!-- Dubbo依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
application-dev.yml
dubbo:
protocol:
port: -1 # 设置Dubbo服务调用的端口 设置-1能够实现动态自动设置合适端口,生成规则是从20880开始递增
name: dubbo # 设置端口名称,一般固定就叫dubbo
registry:
address: nacos://localhost:8848 # 配置当前Dubbo注册中心的类型和地址
consumer:
check: false # 设置为false表示当前项目启动时,不检查要调用的远程服务是否可用,避免报错
更多推荐
所有评论(0)