dubbo属性配置
Posted lina2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo属性配置相关的知识,希望对你有一定的参考价值。
一、覆盖策略
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属性配置的主要内容,如果未能解决你的问题,请参考以下文章