05 Ribbon负载均衡

Ribbon负载均衡

Ribbon 是基于 Netflix Ribbon 实现的一套 客户端 负载均衡的工具
05 Ribbon负载均衡
05 Ribbon负载均衡
05 Ribbon负载均衡

Ribbon(负载均衡+RestTemplate调用)

Ribbon是客户端(消费者)负载均衡的工具。
05 Ribbon负载均衡

依赖

新版的eureka依赖以及集成了Ribbon依赖,所以可以不引用。

也可以加上

 <!--Ribbon的依赖-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
 </dependency>

RestTemplate
@LoadBalanced注解给RestTemplate开启负载均衡的能力。

官方文档:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html
05 Ribbon负载均衡

getForObject/getForEntity方法

05 Ribbon负载均衡

测试getForEntity方法

在消费者cloud-consumer-order80的OrderController方法中添加:

 @GetMapping("/consumer/payment/getEntity/{id}")
    public CommonResult<Payment> getPayment2(@PathVariable("id") Long id){
      
//        return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
        ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);

        //getStatusCode获取状态码,is2xxSuccessful如果是状态码是2xx
        if(entity.getStatusCode().is2xxSuccessful()){
            //返回body
            return entity.getBody();
        }else{
            return new CommonResult<>(444, "操作失败");
        }
    }

Ribbon核心组件IRUle

IRUle接口的实现类:
05 Ribbon负载均衡
05 Ribbon负载均衡
默认为RoundRobinRule轮询。

Ribbon的自定义配置类不可以放在@ComponentScan所扫描的当前包下以及子包下,否则这个自定义配置类就会被所有的Ribbon客户端共享,达不到为指定的Ribbon定制配置,而@SpringBootApplication注解里就有@ComponentScan注解,所以不可以放在主启动类所在的包下。(因为Ribbon是客户端(消费者)这边的,所以Ribbon的自定义配置类是在客户端(消费者)添加,不需要在提供者或注册中心添加)

  1. 所以Ribbon的自定义配置类不能放在springcloud包下不能和主启动类放在同一层,和springcloud包在同一层
  2. 在此包下新建MySelfRule自定义配置类
@Configuration
public class MySelfRule {
    @Bean
    public IRule myRule(){
        return new RandomRule();    //负载均衡机制改为随机
    }
}
  1. n在主启动类上添加@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
    name为指定的服务名(服务名必须与注册中心显示的服务名大小写一致)
    configuration为指定服务使用自定义配置(自定义负载均衡机制)

Ribbon负载均衡——轮询算法

RoundRobinRule原理

05 Ribbon负载均衡

上一篇:CAD二次开发--Ribbon相关封装


下一篇:Feign Ribbon Hystrix 关系剖析