【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/
  • user-service对外提供的接口

user-service2也是同样的代码

@RestController
public class UserController {

    @Value("${server.port}")
    private String port;

    @GetMapping(value = "/provider/test")
    public String test(){
        return "---我是用户服务提供者---" + port;
    }

}

user-consumer

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

  • RestTemplate配置
@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

  • 消费者控制层代码
@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;
    }
}
  • 配置文件
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/
  • pom.xml添加依赖
 <dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
     </dependency>
 </dependencies>

启动注册中心,启动服务提供者,启动消费者,访问消费者地址:
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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值