通过spring配置
<dubbo:reference interface="com.foo.BarService" check="false" /> //关闭某个服务的启动时检查 (没有提供者时报错)
<dubbo:consumer check="false" />//关闭所有服务的启动时检查 (没有提供者时报错):
<dubbo:registry check="false" />//关闭注册中心启动时检查 (注册订阅失败时报错):
通过 dubbo.properties
通过 dubbo.properties
dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
通过 -D 参数
java -Ddubbo.reference.com.foo.BarService.check=false
java -Ddubbo.reference.check=false
java -Ddubbo.consumer.check=false
java -Ddubbo.registry.check=false
dubbo.consumer.check=false// 当前消费者所有服务都不检查
<dubbo:reference id="UserService" interface="com.sangyu.gmall.service.UserService" timeout="3000"/>
<dubbo:consumer check="false" timeout="3000"></dubbo>
<dubbo:reference id="UserService" interface="com.sangyu.gmall.service.UserService" timeout="3000" retries="3"/>
4.非幂等不能设置重试次数,非幂等是每次调用的结果都不一样的,比如:数据库新增
5.retries="0" 代表不重试
针对新版本上线后,考虑影响情况,可以使用多版本,一部分用户使用新版本,一部分用户使用老版本,等新版本稳定后,才开放全部用户使用新版本。
// provider.xml
// 版本1 version="1.0.0"
<bean id="userServiceImpl01" class="com.atguigu.gmall.service.impl.UserServiceImpl"></bean>
<dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0">
</dubbo:service>
// 版本2 version="2.0.0"
<bean id="userServiceImpl02" class="com.atguigu.gmall.service.impl.UserServiceImpl2"></bean>
<dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl02" timeout="1000" version="2.0.0">
</dubbo:service>
//consumer.xml
<dubbo:reference interface="com.sangyu.gmall.service.UserService" id="userService" timeout="5000" retries="3" version="1.0.0"
// consumer.xml
<dubbo:reference interface="com.sangyu.gmall.service.UserService" id="userService" timeout="5000" retries="3" version="*"
实现远程服务后,客户端通常只剩下接口,功能的实现全在服务器端,但提供方有些时候想再客户端调用真正的实现之前也在提供方执行部分逻辑,比如:缓存,参数验证,调用失败后伪造容错数据等等,此时编写一个本地存根,远程引用的接口在服务消费者本地也有实现的代码,如果满足要求才调用远程的接口,如果不满足就不调用,怎么实现呢?在消费方实现远程接口的本地存根实现,必须有一个有参构造器,传入的是远程接口的代理实现(dubbo默认会传进来)
// consumer.xml
<dubbo:reference id="UserService" interface="com.sangyu.gmall.service.UserService" stub="com.sangyu.gmall.service.impl.UserServiceStub" />
// UserServiceStub类
// 在服务消费方增加远程调用接口的本地存根
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;
}
}