前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo第二篇

Dubbo第二篇

作者头像
晚上没宵夜
发布2020-11-11 16:22:47
4740
发布2020-11-11 16:22:47
举报

1. 启动时检查

Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题

我们可以关闭检查,比如测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动

代码语言:javascript
复制
dubbo.consumer.check=false
dubbo.reference.check=false
dubbo.registry.check=false

2. 超时、配置覆盖关系、属性优先级

2.1 超时

provider因为网络等原因很长时间才返回,此时造成消费者阻塞,所以可以设置超时来解决,默认1000毫秒

可在注解内设置timeout

代码语言:javascript
复制
@Reference(timeout = 5000)

2.2 配置覆盖关系

  • 方法级优先,接口次之,全局配置再次之
  • 级别一样,消费者优先,提供者次之

2.3 属性优先级

优先级从高到低:

  • JVM设置的属性
  • XML文件的属性
  • Properties内的属性

3. 重试次数

  • 调用失败后的重试次数,不包含第一次失败的调用,默认2次,在注解内可用retries= ‘2’ 设置
  • 有些调用是幂等的,所以可以重试、有些非幂等设置为0不重试
代码语言:javascript
复制
@Reference(retries = 0)

4. 多版本

当一个接口实现有不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用,让一部分调用旧版本,一部分调用新版本

可在暴露服务接口上添加属性

代码语言:javascript
复制
@Service(version = "1.0.0")
@Service(version = "2.0.0")

@Reference(version = "1.0.0")

5. 本地存根

在进行远程过程调用的时候,我们可能需要先进行参数校验或者本地缓存,那么此时可以利用本地存根了

5.1 消费者方

在消费者这边要创建本地存根,而该存根需要一个有参构造

代码语言:javascript
复制
public class SumServiceStub implements SumService {

    // 自己手动添加一个有参构造
    private final SumService sumService;

    // 框架会传入远程代理对象
    public SumServiceStub(SumService sumService) {
        this.sumService = sumService;
    }

    // 这里可以进行各种调用前置操作
    public int sum(int a, int b) {
        if(a != 0  && b != 0){
            return sumService.sum(a,b);
        }
        return -1;
    }
}

5.2 提供者方

提供者只是需要指明消费者存根的全限定类名即可

代码语言:javascript
复制
@Service(stub = "com.howl.consumer.service.impl.SumserviceStub")	// 指明消费者存根
@Component
public class SumServiceImpl implements SumService {
    @Override
    public int sum(int a, int b) {
        return a+b;
    }
}

6. 高可用

这里本来都不想写了,因为官方写得很清楚,还详细有实例

  • 注册中心宕机
    • 若之前调用过,则会有本地缓存不影响使用,但不能更新服务信息
    • 或者在@Service(url=“127.0.0.1:20882”)跳过注册中心直连提供者
  • 负载均衡:可在注解,控制台进行配置
    • Random 随机
    • RoundRobin 轮询
    • LeastActive 最少活跃
    • ConsistentHash 一致性哈希
  • 服务降级:服务器有压力时,对某些服务或页面进行处理或不处理,保证核心业务正常
    • 消费者不调用而直接返回空
    • 消费者调用失败而返回空
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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