1、启动检查
为了保障服务的正常可用,Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛异常。
此时,就出现一些问题,往往开发中是分模块开发,而服务消费者与服务提供者有连接关系,由于启动检查的原因,就会出现服务消费者永远不能测试的问题。
解决方案:
可以通过 check=false 关闭 ;是否开启启动检查主要是对于消费者
代码:
#配置dubbo服务消费者
dubbo:
consumer:
check: false #关闭启动检查
2、多版本
在正式系统中,为保证系统可用性和更好的并发性,往往通过集群部署。
问题:如果提供者出现重大更新,如何对提供者升级部署?
解决方案:
灰度发布:当初出现新功能时,会先让一部分用户先使用新功能,用户反反馈没问题时,再将所有用户迁移至新功能,Dubbo也是支持灰度发布的,Dubbo提供了提供者多版本的支持,平滑处理项目功能升级部署。
实现方法:
1、编写新的UserServce实现类,作为新版本代码
2、在暴露服务时,指定服务版本
通过在注解 @DubboService 中配置 version 设置版本号
3、消费者引用服务时,指定引用的服务版本
在注解 @DubboReFerence 中配置 version 设置版本号
3、超时与重试
服务消费者在带调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
解决方案:
dubbo 利用超时机制来解决这个问题(使用timeout属性配置超时时间,默认值为1000,单位毫秒)
注意:
若超时时间较短,当网络波动时就会请求失败,Dubbo通过重试机制避免此类问题的发生。
服务消费者与服务提供者一共发生3次请求
Dubbo重试出现的问题:
对于保存类的业务,由于可能的网络波动,服务消费者会向服务提供者发送3次请求,这时可能就会出现问题。
解决方案:
在不需要重试机制的服务消费者 注解@DubboReference中设置retries属性的值,值为0,代表不进行重试。
4、负载均衡策略
在集群部署时,Dubbo提供了4种负载均衡策略,帮助消费者找到最优提供者并调用。
Random :按权重随机,默认值。按权重设置随机概率。
RoundRobin:按权重轮询
LeastActive:最少活跃调用数,相同活跃数的随机。
ConsistentHash:一致性Hash,相同参数的请求总是发到同一体提供者。
同样负载均衡指的是服务消费者,因此需要在服务消费者中配置,注解@DubboReference 中设置 locadbalance 属性 设置负载策略。