Dubbo 配置文件

Scroll Down

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>
  1. 方法级有限
  2. 接口级次之
  3. 全局配置再次之
  4. 级别相同消费优先

全局配置:

<dubbo:consumer check="false" timeout="1000"/>

dubbo-config-override

重试次数

重试次数是一个整数,不包含第一次调用

<dubbo:reference interface="com.foo.BarService" check="false" timeout="3000" retries="4"/>

配置的覆盖同上

多版本

可以按照以下的步骤进行版本迁移:

  1. 在低压力时间段,先升级一半提供者为新版本
  2. 再将所有消费者升级为新版本
  3. 然后将剩下的一半提供者升级为新版本
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="*" />

本地存根

/user-guide/images/stub.jpg

如果需要先判断某些条件再执行远程调用,我们可以使用本地存根提升效率

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" />