前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo常见属性配置(11)

Dubbo常见属性配置(11)

作者头像
桑鱼
发布2020-03-17 16:46:40
8560
发布2020-03-17 16:46:40
举报
一、启动时检查
  1. 默认 check="true"。
  2. check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
  3. 示例

通过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
  1. 配置当前消费者的统一规则
dubbo.consumer.check=false// 当前消费者所有服务都不检查
二、超时设置
  1. 当很多消费者调用提供者,如果提供者因为网络原因会返回会比较慢,此时会有大量的消费者请求堆积导致性能下降,可以设置timeout
<dubbo:reference id="UserService" interface="com.sangyu.gmall.service.UserService" timeout="3000"/>
  1. timeout默认是1000毫秒
  2. 配置所有接口的timeout
<dubbo:consumer check="false" timeout="3000"></dubbo>
  1. 属性配置覆盖关系
  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。
  1. 建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设
三、重试次数
  1. 重试次数不包含第一次调用的次数,retries
<dubbo:reference id="UserService" interface="com.sangyu.gmall.service.UserService" timeout="3000" retries="3"/>
  1. 如果有一个服务有多个服务器提供相同服务的情况下,会去调用其他服务器的服务
  2. 幂等设置重试次数,幂等是方法无论执行多少产生的效果与执行一次产生的效果是一样的,比如查询、删除、修改

4.非幂等不能设置重试次数,非幂等是每次调用的结果都不一样的,比如:数据库新增

5.retries="0" 代表不重试

三、多版本

针对新版本上线后,考虑影响情况,可以使用多版本,一部分用户使用新版本,一部分用户使用老版本,等新版本稳定后,才开放全部用户使用新版本。

  1. 在提供方和消费方配置访问版本,在消费者配置对应的老版本号,实现只支持访问老版本
// 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"
  1. 在消费者配置对应的为*,实现只支持访问老版本
// 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;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、启动时检查
  • 二、超时设置
  • 三、重试次数
  • 三、多版本
  • 四、本地存根
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档