Dubbo 高级特性

2024-04-23 1153阅读

温馨提示:这篇文章已超过373天没有更新,请注意相关的内容是否还可用!

序列化

  • 服务提供者和消费者在传输 Java 对象时需要对对象进行序列化和反序列化,Dubbo 内部已经封装了该过程
  • 只需要在定义 pojo 类时实现 Serializable 接口即可,一般会定义一个公共的 pojo 模块
    1. 新建 dubbo-pojo 模块
    
        
            dubbo_study
            org.example
            1.0-SNAPSHOT
        
        4.0.0
        dubbo-pojo
        
            
                org.projectlombok
                lombok
            
        
    
    
    1. 创建 User 类继承 Serializable 接口
    @Data
    public class User implements Serializable {
        private String name;
        private int age;
    }
    
    1. dubbo-interface 模块依赖 dubbo-pojo 模块,添加如下方法
    User getUser();
    
    1. dubbo-service 模块实现 getUser()
    @Override
    public User getUser() {
        User user = new User();
        user.setAge(20);
        user.setName("小明");
        return user;
    }
    
    1. dubbo-web 模块调用 dubbo-service 的 getUser()
    @RequestMapping("/getUser")
    public User getUser(){
        return quickStartService.getUser();
    }
    
    1. 测试
    // 访问路径:http://localhost:8001/quickStart/getUser
    {
        "name": "小明",
        "age": 20
    }
    

    地址缓存

    • 服务消费者在第一次调用服务提供者时会将地址缓存到本地,之后再调用时不会再访问注册中心
    • 所以注册中心挂了不意味着服务就没法正常访问了
    • 当服务提供者地址发生变化时,注册中心会通知服务消费者

      超时与重试

      • 服务消费者在调用服务提供者时发生阻塞,如果服务消费者一直等待,就会导致在某个峰值时刻,大量请求同时到达消费者,造成大量的线程堆积,消耗光消费者服务器的资源,进而造成雪崩
      • Dubbo 提供了超时机制解决上述问题,我们可以设置一个超时时间,如果超过该时间还没完成服务访问,则自动断开连接并抛出异常;通过 timeout 属性设置超时时间,默认 1000 ,单位毫秒
      • 设置超时时间后,如果在某次服务访问时正好发生了网络抖动,导致服务无法访问,也会自动断开连接,导致用户体验下降,Dubbo 提供了重试机制来解决上述问题;通过 retries 属性设置重试次数,默认重试 2 次
      • timeout 和 retries 属性在服务消费者的 @Reference 注解和服务提供者的 @Service 注解中都可以配置,并且消费者的配置会覆盖提供者的配置,一般建议 timeout 属性配置在提供者,retries 属性配置在消费者

        集群容错

        • 相同服务应用名称的服务提供者自动构成集群
        • 通过 @Reference 注解的 cluster 属性指定集群容错策略
          • FailoverCluster :默认值,失败重试,当出现失败时重试其他服务器
          • FailfastCluster :快速失败,只发起一次调用,失败立即报错
          • FailsafeCluster :失败安全,出现异常时直接忽略,返回一个空结果
          • FailbackCluster :失败恢复,后台记录失败请求,定时重发,直到成功为止
          • ForkingCluster :并行调用多个服务器,第一个成功时立即返回
          • BroadcastCluster:逐个调用所有提供者,任意一台报错则报错

            负载均衡

            • 通过 @Reference 注解的 loadbalance 属性指定负载均衡策略
              • Random :默认值,按权重随机。权重通过 @Service 注解的 weight 属性配置,默认 100
              • RoundRobin :按权重轮询
              • LeastActive :最小活跃调用数
              • ConsistentHash:一致性 Hash ,相同参数的请求总会发送到同一提供者

                服务降级

                • 服务消费者在调用服务提供者时做出指定动作,可以屏蔽某个业务保证核心业务的正常访问

                  Dubbo 高级特性
                  (图片来源网络,侵删)
                • 通过 @Reference 注解的 mock 属性指定服务降级策略

                  • force:return null :直接返回 null ,不发起远程调用
                  • fail:return null :出错后返回 null
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]