一、覆盖策略

JVM启动-D参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
XML次之,如果在XML中有配置,则dubbo.properties中的相应配置项无效。
Properties最后,相当于缺省值,只有XML没有配置时,dubbo.properties的相应配置项才会生效,通常用于共享公共配置,比如应用名。

详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/configuration/properties.html

二、启动时检查

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check="true"。
可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
另外,如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,如果check="false",总是会返回引用,当服务恢复时,能自动连上。

1、通过spring配置文件
关闭某个服务的启动时检查(没有提供者时报错):
<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" check="false"/>
关闭所有服务的启动时检查 (没有提供者时报错):
<dubbo:consumer check="false" />
关闭注册中心启动时检查 (注册订阅失败时报错):
<dubbo:registry check="false" />
2、通过 dubbo.properties
dubbo.reference.com.lina02.gmall.service.UserService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
3、通过 -D 参数
java -Ddubbo.reference.com.lina02.gmall.service.UserService.check=false
java -Ddubbo.reference.check=false
java -Ddubbo.consumer.check=false
java -Ddubbo.registry.check=false
4、配置的含义
dubbo.reference.check=false,强制改变所有reference的check值,就算配置中有声明,也会被覆盖。
dubbo.consumer.check=false,是设置check的缺省值,如果配置中有显式的声明,如:<dubbo:reference check="true"/>,不会受影响。
dubbo.registry.check=false,前面两个都是指订阅成功,但提供者列表是否为空是否报错,如果注册订阅失败时,也允许启动,需使用此选项,将在后台定时重试。

详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html

三、超时时间

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。

配置覆盖关系:
以timeout为例,显示了配置的查找顺序,其它retries,loadbalance,actives等类似:

精确优先 (方法级优先,接口级次之,全局配置再次之)
消费者设置优先(如果级别一样,则消费方优先,提供方次之)

其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-reference.html

http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-consumer.html

http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html

四、重试次数

失败自动切换,当出现失败,重试其它服务器,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

重试次数配置如下:
<dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" retries="2"/>
<dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl">
<dubbo:method name="getUserAddressList" retries="5"/>
</dubbo:service>
<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" retries="4"/>
<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService">
   <dubbo:method name="getUserAddressList" retries="2"/>
</dubbo:reference>

retries="":重试次数,不包含第一次调用,0代表不重试
幂等(设置重试次数)[查询、删除、修改]、非幂等(不能设置重试次数)[新增)

五、版本号

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
在低压力时间段,先升级一半提供者为新版本
再将所有消费者升级为新版本
然后将剩下的一半提供者升级为新版本

老版本服务提供者配置:
<dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" version="1.0.0"/>
新版本服务提供者配置:
<dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" version="2.0.0"/>
老版本服务消费者配置:
<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" version="1.0.0"/>
新版本服务消费者配置:
<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" version="2.0.0"/>
如果不需要区分版本,可以按照以下的方式配置:
<dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" version="*"/>
<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" version="*"/>

六、本地存根

远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做ThreadLocal缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在API中带上Stub,客户端生成Proxy实例,会把Proxy通过构造函数传给Stub,然后把Stub暴露给用户,Stub可以决定要不要去调Proxy。

本地存根类:

package com.lina02.gmall.service.impl;

import java.util.List;

import com.lina02.gmall.bean.UserAddress;
import com.lina02.gmall.service.UserService;
import org.springframework.util.StringUtils; public class UserServiceStub implements UserService { private final UserService userService; /**
* 传入的是userService远程的代理对象
* @param userService
*/
public UserServiceStub(UserService userService) {
super();
this.userService = userService;
} @Override
public List<UserAddress> getUserAddressList(String userId) {
System.out.println("UserServiceStub.....");
if(!StringUtils.isEmpty(userId)) {
return userService.getUserAddressList(userId);
}
return null;
} }

consumer.xml配置本地存根:

<dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" stub="com.lina02.gmall.service.impl.UserServiceStub"/>

详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/local-stub.html

dubbo属性配置的更多相关文章

  1. Dubbo.xml配置源-Dubbo.xsd分析

      我们使用Dubbo时,一般都会使用xml配置基本信息,如项目名称(application).注册中心(register).协议(protocal).服务(service),如下所示: 1 2 3 ...

  2. Dubbo的配置及使用

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  3. DUBBO高级配置:多注册中心配置

    有时候我们需要的服务不在同一个 zookeeper 注册中心上,此时我们需要在 DUBBO 配置文件中配置多个注册中心. 下面我们在之前创建项目的基础上在 provider 模块中增加一个 IBook ...

  4. dubbo高级配置学习

    启动时检查 可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动. 关闭某个服务的启动时检查:(没有提供者时报错) < ...

  5. dubbo源码分析7——dubbo的配置解析_与spring的整合

    dubbo的配置其实就是建立在spring的命名空间的配置机制之上的.在dubbo的jar包的META-INF目录下会有spring.handlers这个文件,用来配置spring的命名空间和解析类的 ...

  6. dubbo系列五、dubbo核心配置

    一.配置文件 1.生产者配置provider.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...

  7. 【基础配置】Dubbo的配置及使用

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  8. 【Dubbo源码阅读系列】之 Dubbo XML 配置加载

    今天我们来谈谈 Dubbo XML 配置相关内容.关于这部分内容我打算分为以下几个部分进行介绍: Dubbo XML Spring 自定义 XML 标签解析 Dubbo 自定义 XML 标签解析 Du ...

  9. ExtJs控件属性配置详细

    序言:    1.本文摘自网络,看控件命名像是4.0以前的版本,但控件属性配置仍然可以借鉴(不足之处,以后项目用到时再续完善). Ext.form.TimeField: 配置项:            ...

随机推荐

  1. 人生苦短之Python迭代器

     迭代 在Python中,如果给定一个list或者touple,我们可以通过for循环来遍历,将值依次取出,这种遍历称为迭代. 在Python中是通过for...in..来进行遍历的,在Java中则是 ...

  2. valid No such filter: 'drawtext'"

    libfreetype is missing. You'll have to rebuild FFmpeg with this library or disable overlays. --enabl ...

  3. html5--3.16 button元素

    html5--3.16 button元素 学习要点 掌握button元素的使用 button元素 用来建立一个按钮从功能上来说,与input元素建立的按钮相同 button元素是双标签,其内部可以配置 ...

  4. Java版本更新历史(ing)

    历史版本特性 JDK Version 1.0 开发代号为Oak(橡树),于1996-01-23发行. JDK Version 1.1 于1997-02-19发行. 引入的新特性包括: 引入JDBC(J ...

  5. Python:递归

    递归两个基本要素: (1) 边界条件:确定递归到何时终止,也称为递归出口. (n = 1)(2) 递归模式:大问题是如何分解为小问题的,也称为递归体.(n*(n-1)!   n>1) 例:累加 ...

  6. Python: PS 滤镜--旋转模糊

    本文用 Python 实现 PS 滤镜中的旋转模糊,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/details/392 ...

  7. UOJ309 UNR #2 排兵布阵

    包含不小于$\sqrt n$列的只有不大于$\sqrt n$行,修改时这些行打标记,否则暴力更新,操作一列的时候暴力更新这些行.合并没啥影响直接搞就是了.更新需要访问位置,感觉必须用哈希表,并不是特别 ...

  8. web集群时代

    随着业务的不断增加,我们的单台服务器承受不住需求,那么我们就需要对此进行伸缩,有两种维度,一种是纵向的也就是增大该台服务器的硬件,再者就是加新服务器与之前的机器组成集群对外提供服务,我们都知道前者是有 ...

  9. js的常用正则表达式

    1.在input框中只能输入金额,其实就是只能输入最多有两位小数的数字 //第一种在input输入框限制 <input type="text" maxlength=" ...

  10. cf 424

    Office Keys 首先显然有随人位置的递增,钥匙的位置也要递增,这样考虑两张做法: 1.$f(i,j)$ 表示前i个人,钥匙到第j个最少用的最大时间,然后$O(nK)$ dp 2.二分时间,对于 ...