1、配置原则
JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。在与SpringBoot整合中,XML与SpringBoot配置文件一样。
Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。
2、配置的覆盖规则
方法级优先,接口级次之,全局配置再次之。
如果级别一样,则消费方优先,提供方次之。
3、启动时检查check
<!-- 配置当前消费者的统一规则:关闭所有服务的启动时检查(没有提供者时报错) -->
<dubbo:consumer check="false"></dubbo:consumer>
4、设置超时时间timeout
在消费者端设置
<!-- 声明要调用的远程服务的接口;生成远程服务代理 -->
<!-- timeout设置超时,调用的接口在指定时间内没有返回,立即终止;默认值是1000毫秒-->
<dubbo:reference interface="com.atguigu.gmall.service.UserService"
id="userService" timeout="5000">
<!-- 方法级优先,接口次之,全局配置再次之。如果级别一致,消费方优先,提供方次之 -->
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:reference>
<!-- 配置当前消费者的统一规则:关闭所有服务的启动时检查(没有提供者时报错) -->
<dubbo:consumer check="false" timeout="5000"></dubbo:consumer>
在提供者端设置
<!-- 暴露提供服务的接口,ref指向提供服务的接口的实现类 -->
<!-- timeout设置超时,调用的接口在指定时间内没有返回,立即终止;默认值是1000ms-->
<dubbo:service interface="com.atguigu.gmall.service.UserService"
ref="userServiceImpl" timeout="1000">
<!-- 方法级优先,接口次之,全局配置再次之。如果级别一致,消费方优先,提供方次之 -->
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
<!-- 统一设置服务提供方的规则 -->
<dubbo:provider timeout="1000"></dubbo:provider>
5、重试次数retries
<!-- 声明要调用的远程服务的接口;生成远程服务代理 -->
<!-- timeout设置超时,调用的接口在指定时间内没有返回,立即终止;默认值是1000毫秒-->
<!-- retries设置重试次数,不包含第一次调用 -->
<dubbo:reference interface="com.atguigu.gmall.service.UserService"
id="userService" timeout="5000" retries="3">
</dubbo:reference>
6、多版本version
在提供者端提供多个版本服务
<dubbo:service interface="com.atguigu.gmall.service.UserService"
ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
<bean id="userServiceImpl01" class="com.atguigu.gmall.service.impl.UserServiceImpl01"></bean>
<dubbo:service interface="com.atguigu.gmall.service.UserService"
ref="userServiceImpl02" timeout="1000" version="2.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
<bean id="userServiceImpl02" class="com.atguigu.gmall.service.impl.UserServiceImpl02"></bean>
在消费者端通过version指定服务的版本
<dubbo:reference interface="com.atguigu.gmall.service.UserService"
id="userService" timeout="5000" retries="3" version="2.00">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:reference>
7、本地存根stub
编写本地存根UserServiceStub 。它会在真正调用之前做一些验证
public class UserServiceStub implements UserService {
private final UserService userService;
/**
* dubbo会自动创建本地存根对象,会传入userService的远程代理对象
* @param userService
*/
public UserServiceStub(UserService userService) {
this.userService = userService;
}
public List<UserAddress> getUserAddressList(String userId) {
System.out.println("UserServiceStub....");
if(!StringUtils.isEmpty(userId)){
return userService.getUserAddressList(userId);
}
return null;
}
}
配置本地存根
<!-- 声明要调用的远程服务的接口;生成远程服务代理 -->
<!-- timeout设置超时,调用的接口在指定时间内没有返回,立即终止;默认值是1000毫秒-->
<!-- retries设置重试次数,不包含第一次调用 -->
<!-- stub配置本地存根 -->
<dubbo:reference interface="com.atguigu.gmall.service.UserService"
id="userService" timeout="5000" retries="3" stub="com.atguigu.gmall.service.impl.UserServiceStub">
<!-- 方法级优先,接口次之,全局配置再次之。如果级别一致,消费方优先,提供方次之 -->
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:reference>