Dubbo 配置文件
Dubbo 配置优先级
在Dubbo中,可以有以下四种配置,优先级逐个降低
- JVM System Properties,-D参数,虚拟机参数
- Externalized Configuration,外部化配置,xml
- ServiceConfig、ReferenceConfig等编程接口采集的配置,内部配置
- 本地配置文件dubbo.properties
启动时检查
检查我们需要的服务是不是已经注册,我们可以配置为不进行检查
1.关闭某个启动时检查
<dubbo:reference interface="com.foo.BarService" check="false" />
2. 关闭所有的服务启动时检查
<dubbo:consumer check="false" />
3. 关闭注册中心启动时检查,即使没有注册中心也不报错
<dubbo:registry check="false" />
也可以在application.properties
中配置
dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
超时
只要在规定时间内没有返回,服务就立即终止,不进行阻塞
<dubbo:reference interface="com.foo.BarService" check="false" timeout="3000" />
配置timeout
属性
timeout
属性还可以配置在精确到方法上
<dubbo:reference interface="com.foo.BarService" check="false" timeout="3000">
<dubbo:method name="testMethod" timeout="1000"></dubbo:method>
</dubbo:reference>
- 方法级有限
- 接口级次之
- 全局配置再次之
- 级别相同消费优先
全局配置:
<dubbo:consumer check="false" timeout="1000"/>
重试次数
重试次数是一个整数,不包含第一次调用
<dubbo:reference interface="com.foo.BarService" check="false" timeout="3000" retries="4"/>
配置的覆盖同上
多版本
可以按照以下的步骤进行版本迁移:
- 在低压力时间段,先升级一半提供者为新版本
- 再将所有消费者升级为新版本
- 然后将剩下的一半提供者升级为新版本
1. 配置服务的老版本实现
<dubbo:service interface="com.foo.BarService" version="1.0.0" />
2. 配置服务的新版本实现
<dubbo:service interface="com.foo.BarService" version="2.0.0" />
3. 消费者配置
<dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />
使用2.0版本
<dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
使用1.0版本
4. 不区分版本配置
<dubbo:reference id="barService" interface="com.foo.BarService" version="*" />
本地存根
如果需要先判断某些条件再执行远程调用,我们可以使用本地存根提升效率
package com.foo;
public class BarServiceStub implements BarService {
private final BarService barService;
// 构造函数传入真正的远程代理对象
//必须要有有参构造器
//dubbo传入远程代理对象
public BarServiceStub(BarService barService){
this.barService = barService;
}
public String sayHello(String name) {
// 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等
try {
//这里才调用远程对象
return barService.sayHello(name);
} catch (Exception e) {
// 你可以容错,可以做任何AOP拦截事项
return "容错数据";
}
}
}
配置方法
<dubbo:service interface="com.foo.BarService" stub="true" />
或者
<dubbo:service interface="com.foo.BarService" stub="com.foo.BarServiceStub" />