启动时检查
简介
Dubbo在启动时检查依赖得服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题
建议
如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时, 会抛出异常,拿到 null 引用,如果 check="false",总是会返回引用,当服务恢复时,能自动连上
配置【默认为true】
@DubboReference(check = false) private OrdersService OrdersService;
地址缓存
问题
注册中心挂了,服务是否可以正常访问?
回答
因为Dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。 服务提供者地址发生变化时,注册中心会通服务消费者。
超时机制
简介
设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
优先级讲解
超时机制是针对服务消费端,为什么服务提供端也可以设置超时呢?
1.服务提供端的超时配置是服务消费端的缺省配置,即如果服务提供端设置了超时,服务消费端可以不设置超时时间,简化了配置
2.针对控制的粒度,Dubbo支持了接口级别也支持方法级别,可以根据不同的实际情况精确控制每个方法的超时时间。
3.优先级:@DubboReference【服务消费端】>@DubboService【服务提供端】
配置【服务提供端】
@DubboService(timeout = 3000) public class PaymentServiceImpl implements IPaymentService
配置【服务消费端】
@DubboReference(timeout = 2000)// 远程注入 private OrderService OrderService;
重试机制
简介
Dubbo在调用服务不成功时,进行重试
配置【服务消费者】
//Dubbo在调用服务不成功时,默认会重试2次。 @DubboReference(timeout = 3000,retries = 2)
多版本灰度发布
简介
灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能
Dubbo提供多版本的配置,方便我们做服务的灰度发布,或者是解决不兼容的问题
版本迁移步骤
1.在低压力时间段,先升级一半提供者为新版本
2.再将所有消费者升级为新版本
3.然后将剩下的一半提供者升级为新版本
配置【老版本服务提供者配置】
@DubboService(version = "1.0.0") public class PaymentServiceImpl implements IPaymentService
配置【新版本服务提供者配置】
@DubboService(version = "2.0.0") public class PaymentServiceImpl implements IPaymentService
配置【新版本服务消费者配置】
@DubboReference(version = "1.0.0") private IPaymentService iPaymentService;
如果不需要区分版本,可以按照以下的方式配置
@DubboReference(version = "*") private IOrderService iOrderService;// 订单服务
负载均衡
简介
Dubbo是一个分布式服务框架,如何从多个服务提供者组成的集群中挑选出一个进行调用,就涉及到一个负载均衡的策略
Dubbo内置负载均衡策略
random:随机负载均衡,随机选择一个【默认负载均衡】
leastactive:最少活跃调用数,相同活跃数的随机
roundrobin:轮询负载均衡
consistenthash:一致性哈希负载均衡,相同参数的请求总是落在同一台机器上
配置【服务生产者】
@DubboService(loadbalance = "roundrobin")
配置【服务消费者】
@DubboReference(loadbalance = "roundrobin"
查看负载均衡配置
编辑器中快速按2下Shift,搜索Balance
集群容错
简介
Dubbo框架为服务集群容错提供了一系列好的解决方案,在此称为Dubbo服务集群容错模式
容错模式
Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用retries配置。一般用于读操作
Failfast Cluster : 快速失败,只发起一次调用,失败立即报错。通常用于写操作。
Failsafe Cluster : 失败安全,出现异常时,直接忽略。返回一个空结果。日志不重要操作。 Failback Cluster : 失败自动恢复,后台记录失败请求,定时重发。非常重要的操作。
Forking Cluster:并行调用多个服务器,只要有一个成功即返回。
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。 同步要求高的可以使用这个模式。
配置【服务消费者】
@DubboReference(cluster = "failover") private OrderService orderService;
查找容错配置
编辑器快速按2下Shift,搜索Cluster
服务降级
服务降级方式
mock=force:return null
表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
mock=fail:return null
表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
配置【服务消费者】
@DubboReference(mock = "force:return null")
服务限流
并发控制【服务生产者】
//服务端并发执行(或占用线程池线程数)不能超过10个 @DubboService(executes = 10)
连接控制【服务生产者】
//占用连接的请求的数不能超过10个 @DubboService(actives= 10)