• 【SpringCloud学习笔记】Ribbon负载均衡


    Ribbon

    • 什么是Ribbon

    Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的负载均衡算法

    • Ribbon解决了什么问题

    提供了一套微服务负载均衡解决方案

    • Ribbon负载均衡策略

    轮询策略(默认),随机策略,权重轮询策略,随机策略,最少并发数策略等等

    • 负载均衡的使用

    搭建两个user-service服务提供者,一个user-consumer服务调用者
    在这里插入图片描述

    user-service

    • application.yml

    user-service,user-service2服务的配置文件相同,只是端口不同

    server:
      port: 9001
    spring:
      application:
        name: user-service
    eureka:
      instance:
        hostname: localhost
        #开启ip注册
        prefer-ip-address: true
      client:
        #默认值是true,是否将自己注册到注册中心
        register-with-eureka: true
        #默认值是true,是否从注册中心拉取服务
        fetch-registry: true
        #注册中信对外暴露的注册中心地址
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • user-service对外提供的接口

    user-service2也是同样的代码

    @RestController
    public class UserController {
    
        @Value("${server.port}")
        private String port;
    
        @GetMapping(value = "/provider/test")
        public String test(){
            return "---我是用户服务提供者---" + port;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    user-consumer

    服务消费者调用服务提供者,通过配置RestTemplate的Bean对象上面添加@LoadBalanced注解,即可实现默认的负载均衡–轮询策略

    • RestTemplate配置
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 消费者控制层代码
    @RestController
    public class UserController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        private static final String URL = "http://user-service";
    
        @GetMapping(value = "/consumer/test")
        public String test(){
            String str = restTemplate.getForObject(URL + "/provider/test", String.class);
            System.out.println("打印调用服务者的结果:" + str);
            return "服务消费者调用服务提供者:" + str;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 配置文件
    server:
      port: 9003
    spring:
      application:
        name: user-consumer
    eureka:
      instance:
        hostname: localhost
        #开启ip注册
        prefer-ip-address: true
      client:
        #默认值是true,是否将自己注册到注册中心
        register-with-eureka: true
        #默认值是true,是否从注册中心拉取服务
        fetch-registry: true
        #注册中信对外暴露的注册中心地址
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • pom.xml添加依赖
     <dependencies>
         <dependency>
             <groupId>org.springframework.bootgroupId>
             <artifactId>spring-boot-starter-webartifactId>
         dependency>
         <dependency>
             <groupId>org.springframework.cloudgroupId>
             <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
         dependency>
         <dependency>
             <groupId>org.springframework.cloudgroupId>
             <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
         dependency>
     dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    启动注册中心,启动服务提供者,启动消费者,访问消费者地址:
    http://localhost:9003/consumer/test
    在这里插入图片描述

    • 负载均衡全局配置

    直接在服务消费者配置RestTemplat类上面添加@LoadBalanced注解是全局的,也有局部配置,是针对某一个服务进行配置,该配置是写配置文件中的

    • 负载均衡局部配置,需要在配置文件中配置
    # 负载均衡局部配置
    user-service: # 服务名称
      ribbon: #负载均衡策略
        ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)
        ReadTimeout: 3000 #服务请求处理超时时间(毫秒)
        OkToRetryOnAllOperations: true #对超时请求启用重试机制
        MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
        MaxAutoRetries: 1 # 切换实例后重试最大次数
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    重启消费者重新访问下地址,调用服务者的服务变成了随机
    在这里插入图片描述

  • 相关阅读:
    QT widget
    Eureka注册中心
    如何运营好技术相关的自媒体?
    「校园 Pie」 系列活动正式启航,首站走进南方科技大学!
    (路透社数据集)新闻分类:多分类问题实战
    【MySQL】——Select查询语句(其二)
    Redis(十一) 分布式锁
    力扣刷题之数组专栏(共16道题)
    2022第五空间WEB&MISC
    java基于ssm+vue+elementui楼盘房屋销售系统 前后端分离
  • 原文地址:https://blog.csdn.net/qq_42494654/article/details/120378345