Apache Dubbo学习笔记
RPC
- 解释:远程方法调用
- 影响RPC框架性能的两个因素:
- 能否在多个服务器之间建立连接(通信)
- 序列化和反序列化的速度(序列化)
Dubbo简介
- 高性能JAVA RPC框架
特性
- 面向接口代理的高性能RPC调用
- 智能负载均衡
- 服务自动注册与发现
- 高度可拓展能力
- 运行期流量调度
- 灰度发布:++渐进式发布++
- 可视化的服务治理和运维
Dubbo设计架构
- 对象
- 服务提供者:Provider
- 注册中心:Registry,即zookeeper
- 服务消费者:consumer
实现
- 添加Dubbo依赖
<!--dubbo--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!--zookeeper的客户端--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
Dubbo与SpringBoot整合
- 添加依赖
<!--针对spring boot在2.0版本之上-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
-
使用的注解
- @Service (com.alibaba.dubbo.config.annotation.Service):暴露服务
- @Reference:远程引用这个service
-
其他和之前一样配置即可
Duboo配置dubbo.properties
- dubbo配置问价的类型
- JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
- XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。
- Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。
- -D > XML > properties
Dubbo配置超时和配置覆盖
- 配置超时设置: 添加
timeout
属性
timeout的默认值是1000,单位:毫秒
<dubbo:reference interface="com.lhc.provider.service.UserService" id="userService" check="false" timeout="5000"/>
- 方法级 > 接口级 > 全局配置
- 如果级别一样,消费方优先于提供方
Dubbo配置重试次数
retries
属性表示重试次数,不包含第一次调用,0表示不重试。增加操作不做重试操作,*表示随机调用
<dubbo:reference interface="com.lhc.provider.service.UserService" id="userService" check="false" timeout="5000" retries="5"/>
Dubbo与SpringBoot整合的三种方式
- 使用
@Service
暴露服务,主类上使用@EnableDubbo
注解 - 添加xml配置文件,在主类上使用
@ImportResource("classpaht:provider.xml")
加载配置文件 - 使用JAVA代码将每一个组件手动添加到容器中
Dubbo高可用 ZooKeeper宕机与Dubbozhilian
-
现象: zookeeper注册中心宕机,还可以消费dubbo暴露服务
-
原因:
- 监控中心宕机不影响使用,只是丢失部分采样数据
- 数据库宕机后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
- 注册中心对等集群,任意一台宕机后,将自动切换到另一台
- 注册中心全部宕机后,服务提供者和服务消费者仍能通过本地缓存通讯
- 提供者无状态,任意一台宕机后,不影响使用
- 提供者全部宕机后,消费者应用给将无法使用,并无限次重连等待提供者恢复
-
如何使用Dubbo直连:
@Service
public class OrderServiceImpl implements OrderService{
@Reference(url = "127.0.0.1:20880") // 使用url属性,并赋予提供者的地址,实现dubbo直连
private UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
List<UserAddress> list = userService.getUserAddressList("1");
return list;
}
}
Dubbo高可用 负载均衡机制
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用
- Dubbo中四种负载均衡机制
- Random LoadBalance : 随机,按权重设置随机概率
- RoundRobin LoadBalance :轮询,按公约后的权重设置轮询比率。
- LeastActive LoadBalance : 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
- ConsistentHash LoadBalance : 一致性 Hash,相同参数的请求总是发到同一提供者
Dubbo高可用 服务降级
看文档
demo下载链接:https://share.weiyun.com/54L7ZuE