Dubbo 高级特性

05-01 1266阅读 0评论

序列化

  • 服务提供者和消费者在传输 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 高级特性,Dubbo 高级特性,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,访问,注册,接口,第1张
                  (图片来源网络,侵删)
                • 通过 @Reference 注解的 mock 属性指定服务降级策略

                  • force:return null :直接返回 null ,不发起远程调用
                  • fail:return null :出错后返回 null
                  Dubbo 高级特性,Dubbo 高级特性,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,访问,注册,接口,第2张
                  (图片来源网络,侵删)
                  Dubbo 高级特性,Dubbo 高级特性,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,访问,注册,接口,第3张
                  (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1266人围观)

还没有评论,来说两句吧...

目录[+]