• Ribbon负载均衡的使用与切换算法


    作用

      客户端的负载均衡,与RestTemplate结合使用

    1:pom

      eureka的客户端与nocos的客户端pom依赖,都集成了ribbon,所以不再需要重复添加依赖

    2:将RestTemplate注入到spring容i中

    @Component
    @Configuration
    public class AppConfiguration {
        
        @LoadBalanced   // 负载均衡
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }

       @LoadBalanced // 负载均衡  该注解标记使用负载均衡,不标记则会导致:客户端发现服务实例有多个,不知道调用哪一个的问题(默认使用轮询算法)

    3:RestTemplate的使用

        @Autowired
        private RestTemplate restTemplate;
    
        private String url = "http://CLOUD-PAYMENT-SERVICE";  //正式环境从配置文件中读取
    
    
        @RequestMapping("/get/{id}")
        public BaseResult findById(@PathVariable("id") Integer id) {
            ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(url + "/payment/get/" + id, BaseResult.class);
            BaseResult body = forEntity.getBody();
            return body;
        }

    4:替换负载规则

      4.1 负载均衡的策略

    ribbon
        负载均衡
        步骤:
            第一步:选择eurekaServer,他优先选择在同一区域内负载较少的server
            第二步:根据用户指定的策略,从server取到的服务注册列表中选择一个地址
        策略Irule:
            RoundRobinRule
                轮询
            WeighedResponseTimeRule
                响应速度快的实例选择权重大
            RandomRule
                随机
            RetryRule
                先按照RoundRobinRule策略获取,失败后会重试(重试试还是找本次获取的实例,还是找另一个??)
            BestAvailableRule
                过滤掉多次访问而处于短路器跳闸状态的服务,然后选择一个并发小的
            ZoneAvoidanceRule
                默认规则,符合判断server所在域的性能和server的可用性选择服务器
            根据响应时间加权
    
        替换负载规则
    
            备注:自定义rebion不应该放到@ComponentScan下,否则会被所有的客户端共享,springBootApplication注解,默认带上@ComponentScan下
    
          备注:eureka-client依赖,默认集成了ribbon

      4.2 自定义负载均衡

    @Configuration
    public class CloudRondowRule {
    
        @Bean
        public IRule iRule() {
            return new RandomRule();  //随机的规则
        }
    }

    main方法在springcloud包下,CloudRondowRule规则的定义在myRule包下,这样就不会扫描到了CloudRondowRule

    5:标记客户端使用定义的负载均衡的切换规则

    @EnableEurekaClient
    @SpringBootApplication
    @RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = CloudRondowRule.class)  
    public class OrderMain80 {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderMain80.class);
        }
    }

    6:调用客户端的接口测试

  • 相关阅读:
    vuejs2从入门到精通视频教程
    vuejs2项目开发实战视频教程
    vuejs2从入门到精通视频教程
    Bootstrap视频教程
    开通博卡拉
    阿里云Ubuntu 16 FTP安装配置注意事项
    [解决方法] Java-Class.forName() 反射/映射子类 并转化为父类/接口
    [HTML/CSS] ul元素居中处理
    [HTML/Javascript] JS判断IE浏览器各版本
    [HTML/JS] JQuery 页面滚动回到顶部
  • 原文地址:https://www.cnblogs.com/draymond/p/12725899.html
Copyright © 2020-2023  润新知