一、覆盖策略

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. RobotFramework教程使用笔记——web自动化测试弹窗处理

    在web自动化测试中会遇到各种弹出框,在selenium中有对这些弹出框的处理. 弹出框一般有这么几类: 1.普通的弹出窗口,如果是可以定位的,直接定位到窗口,然后进行相应的操作. 2.如果是浏览器系 ...

  2. mediaxyz访谈录:ffmpeg的码率控制

    mediaxyz是一位研究ffmpeg有三年的高人了,这几天一直在折腾ffmpeg中的x264,就是不知道该如何控制码率,主要是参数太多,也不知道该如何设置,在 google上search了一下,这方 ...

  3. Lucas定理和扩展Lucas定理

    1.Lucas定理 首先给出式子:\(C_n^m\%p = C_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor} * C_{n\%p}^{ ...

  4. php获取YouTube视频信息的方法

    YouTube的视频地址格式https://www.youtube.com/watch?v=[VIDEO_ID]例子:https://www.youtube.com/watch?v=psvkyf3Pz ...

  5. FFmpeg在Linux下搭建 ***

    今天介绍下FFmpeg在Linux下安装编译过程,总体过程比较顺利,就是在ffmpeg等的时间稍长点,仅当记录. 关于FFmpeg FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采 ...

  6. awk里面执行shell命令

    先把文件列表存在filename文件中 先 awk '{system("rm $0")}' filename -------WRONG 因为对于 system来说 $0 不再是某行 ...

  7. SetConsoleCtrlHandler() -- 设置控制台信号处理函数

    http://www.groad.net/bbs/thread-8253-1-1.html 当你在命令行里工作时,经常会输入 Ctrl-C 这个组合键以停止程序的运行.SetConsoleCtrlHa ...

  8. Linux文件IO操作函数概述

    文件概述 Linux中,一切皆文件.文件为操作系统服务和设备提供了一个简单而一致的接口.这意味着程序完全可以像使用文件那样使用磁盘文件.串行口.打印机和其他设备. 也就是说,大多数情况下,你只需要使用 ...

  9. 使用you-get下载网页小视频(实际上你可以下载任意你想要的web网页中的内容)

    1. 什么是you-get? You-Get是一个小型的命令行实用程序,用于从Web下载媒体内容(视频,音频,图像),如果没有其他方便的方法可以尝试使用you-get. 2.安装you-get 打开命 ...

  10. POJ3692【二分匹配】

    题意: 有男生女生,男生都认识双方,女生都认识双方,给出一些男女关系,问最大拿多少个人,使得所有人都认识双方. 思路: 原图最大团=总结点数-[[补图(补图为二分图)]的最大独立集=最大完全子图的顶点 ...