3.Dubbo高级特性
Dubbo高级特性
1、超时与重试
服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
- dubbo 利用超时机制来解决这个问题(使用timeout属性配置超时时间,默认值1000,单位毫秒)
- 若超时时间较短,当网络波动时请求就会失败,Dubbo通过重试机制避免此类问题的发生
user-consumer模块中添加配置信息
dubbo:
registry:
address: nacos://127.0.0.1:8848
consumer:
timeout: 3000
retries: 0
2.为了保障服务的正常可用,Dubbo 会在启动时检查依赖的服务是否可用,不可用时会抛出异常

在开发时,往往会存在没有提供者的情况。由于启动检查的原因,可能导致开发测试出现问题
可以通过check=false关闭
user-consumer模块中添加配置信息
dubbo:
registry:
address: nacos://127.0.0.1:8848
consumer:
check: false #取消启动检查
retries: 0 #取消重试机制,默认重试俩次
3.灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。
Dubbo提供了提供者多版本的支持,平滑处理项目功能升级部署
(1)user-provider定义新的服务实现类UserServiceImpl2,指定版本
@DubboService(version = "v2.0.0")
public class UserServiceImpl2 implements UserService {
//把dao接口自动装配到service实现类上
@Autowired
private UserMapper userMapper;
......
}
(2)user-consumer消费者调用时,指定版本调用
@RestController
@RequestMapping("/user")
public class UserController {
@DubboReference(version = "v2.0.0")
private UserService userService;
......
}
(3)在集群部署时,Dubbo提供了4种负载均衡策略,帮助消费者找到最优提供者并调用
- Random :按权重随机,默认值。按权重设置随机概率。
- RoundRobin :按权重轮询
- LeastActive:最少活跃调用数,相同活跃数的随机。
- ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。
@RestController
@RequestMapping("/user")
public class UserController {
//引用远程服务
@DubboReference(loadbalance = "roundrobin")
private UserService userService;
}

浙公网安备 33010602011771号