Dubbo 高级特性

2 Dubbo 高级特性

2.1 dubbo-admin

  • dubbo-admin管理平台,是图形化的服务管理页面
  • 从注册中心中获取到所有的提供者/消费者进行配置管理
  • 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能

2.2 序列化

两个机器之间传输数据,如何传输对象?

  • 消费者A 调用 生产者B 的查询接口,生产者B 将返回的对象数据序列化后返回给消费者A,消费者A再将数据进行反序列化为原对象

  • dubbo内部已经将序列化和反序列化过程内部封装了,我们只需要在定义pojo类时实现Serializable接口即可

  • 一般会定义一个公共pojo模块,让生产者和消费者都依赖该模块

2.3 地址缓存

注册中心宕机后,服务是否可以正常访问?

可以,因为dubbo服务消费者在第一次调用时,会将服务提供方的地址缓存到本地,以后在调用的时候则不需要访问注册中心

2.4 超时与重试

  • 服务消费者在调用服务提供者的时候发生阻塞、等待的情形,这个时候,服务消费者会一直等待下去

  • 在高峰时刻,大量的请求都在同时请求服务的消费者,会造成线程大量堆积,势必会造成雪崩

  • dubbo利用超时机制来解决问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接

  • dubbo使用timeout属性配置超时时间,默认1000,单位毫秒

  • 超时时间,可以配置在生产方或消费方,建议配置在生产方,因为上产方对接口的响应时间更熟悉

  • 如果出现网络抖动,为了防止调用一次就失败,可以使用重试 retries 解决,默认为 2 次

    //使用dubbo 的@service注解将这个类提供的方法(服务)对外发布,将访问的地址 ip,端口,路径注册到服务中心
    @Service(timeout = 2000,retries = 0)
    public class UserServiceImpl implements UserService {
        @Override
        public User findUserById(int id) {
            User user = new User();
            user.setId(1);
            user.setName("王");
            user.setPassword("123456");
            return user;
        }
    }
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        /**
         * @Reference :远程注入
         * 1.从zk注册中心获取userService的访问路径url
         * 2.远程调用rpc
         * 3.将结果封装为一个代理对象,给变量赋值
         */
        @Reference(timeout = 1000,retries = 1)
        private UserService userService;
    
        @RequestMapping("/findUser")
        public User findUser(int id) {
            return userService.findUserById(id);
        }
    }
    

2.5 多版本

  • 灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没有问题时,在将所有的用户迁移到新功能

  • dubbo使用 version 属性来设置和调用同一个接口的不同版本(version)

    //服务指定版本
    @Service(timeout = 2000,retries = 0, version = "v2.0")
    public class UserServiceImpl implements UserService {
    }
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
        //调用者指定调用的版本
        @Reference(timeout = 1000, retries = 1, version ="v2.0")
        private UserService userService;
    }
    

2.6 负载均衡

负载均衡策略(weight)

  • Random:按权重随机,默认值,按权重设置随机概率

  • RoundRobin:按权重轮询

  • LeastActive:最少活跃调用数,相同活跃数的随机

  • ConsistentHash:一致性Hash,相同参数的请求总是发到同一提供者

    @Service(timeout = 2000, retries = 0, version = "v2.0", weight = 100)
    public class UserServiceImpl implements UserService {
    }
    

2.7 集群容错

集群容错模式(cluster)

  • Failover Cluster:失败重试,默认值,当出现失败,重试其它服务器,默认重试 2 次,使用 retries 配置,一般用于读操作

  • Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于写操作

  • Failsafe Cluster:失败安全,出现异常时,直接忽略,返回一个空结果

  • Failback Cluster:失败自动恢复,后台记录失败的请求,定时重发

  • Forking Cluster:并行调用多个服务器,只要一个成功就返回

  • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错

    @Reference(timeout = 1000, retries = 1, version = "v2.0",cluster = "failover")
    private UserService userService;
    

2.8 服务降级

服务降级方式(mock)

  • mock=force:return null 表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用,用来屏蔽不重要服务不可用时对调用方的影响

  • mock=force:return null 表示消费方对该服务的方法调用失败后,再返回 null 值不抛出异常,用来容忍不重要服务不稳定时对调用方的影响

    @Reference(timeout = 1000, retries = 1, version = "v2.0",cluster = "failover",mock = "force:return null")
     private UserService userService;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值