Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题
我们可以关闭检查,比如测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动
dubbo.consumer.check=false
dubbo.reference.check=false
dubbo.registry.check=false
provider因为网络等原因很长时间才返回,此时造成消费者阻塞,所以可以设置超时来解决,默认1000毫秒
可在注解内设置timeout
@Reference(timeout = 5000)
优先级从高到低:
@Reference(retries = 0)
当一个接口实现有不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用,让一部分调用旧版本,一部分调用新版本
可在暴露服务接口上添加属性
@Service(version = "1.0.0")
@Service(version = "2.0.0")
@Reference(version = "1.0.0")
在进行远程过程调用的时候,我们可能需要先进行参数校验或者本地缓存,那么此时可以利用本地存根了
在消费者这边要创建本地存根,而该存根需要一个有参构造
public class SumServiceStub implements SumService {
// 自己手动添加一个有参构造
private final SumService sumService;
// 框架会传入远程代理对象
public SumServiceStub(SumService sumService) {
this.sumService = sumService;
}
// 这里可以进行各种调用前置操作
public int sum(int a, int b) {
if(a != 0 && b != 0){
return sumService.sum(a,b);
}
return -1;
}
}
提供者只是需要指明消费者存根的全限定类名即可
@Service(stub = "com.howl.consumer.service.impl.SumserviceStub") // 指明消费者存根
@Component
public class SumServiceImpl implements SumService {
@Override
public int sum(int a, int b) {
return a+b;
}
}
这里本来都不想写了,因为官方写得很清楚,还详细有实例