4.负载均衡

4.1客户端负载均衡概述

  • Ribbon概述
    ribbon是Netflix提供的一个基于Http和TCP的客户端负载均衡工具
  • 客户端负载均衡
    client.png
    • 负载均衡算法在客户端
    • 客户端维护服务地址列表
  • 服务端负载均衡
    server.png
    • 负载均衡算法在服务端
    • 由负载均衡器维护服务地址列表

4.2简化RestTemplate调用

  1. 在RestTemplate上添加注解
    ```java @Configuration public class RestTemplateConfig {
  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate(){
  4. return new RestTemplate();
  5. }

}

  1. 2. 在调用时指定服务名
  2. ```java
  3. @GetMapping("/goods2/{id}")
  4. public Goods findGoodsById2(@PathVariable("id") int id){
  5. //使用Ribbon简化RestTemplate
  6. String url = "http://eureka-provider/goods/findOne/"+id;
  7. Goods goods = restTemplate.getForObject(url, Goods.class);
  8. return goods;
  9. }

4.3负载均衡策略

4.3.1策略

  • 随机
  • 轮询
  • 最小并发
  • 过滤
  • 响应时间
  • 轮询重试
  • 性能可用性

4.3.2 使用负载均衡

  • 使用bean的方式
    • 在消费者端配置负载均衡策略Bean
      ```java package com.itheima.consumer.config;

import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

/**

  • @author liqp
  • @version 1.0
  • @date 2020/8/19 */ @Configuration public class MyRule{

    @Bean public IRule rule() {

    1. return new RandomRule();

    } } ```

    • 在引导类添加注解
      ```java package com.itheima.consumer;

import com.itheima.consumer.config.MyRule; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.ribbon.RibbonClient;

@EnableDiscoveryClient // 激活DiscoveryClient @EnableEurekaClient @SpringBootApplication @RibbonClient(name = “eureka-provider”, configuration = MyRule.class) // 配置负载均衡策略 public class ConsumerApp {

  1. public static void main(String[] args) {
  2. SpringApplication.run(ConsumerApp.class, args);
  3. }

}

  1. - 使用配置方式
  2. ```yml
  3. server:
  4. port: 9000
  5. eureka:
  6. instance:
  7. hostname: localhost # 主机名
  8. client:
  9. service-url:
  10. defaultZone: http://localhost:8761/eureka
  11. ## defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
  12. spring:
  13. application:
  14. name: eureka-consumer # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径
  15. # 配置的方式设置Ribbon的负载均衡策略
  16. EUREKA-PROVIDER:
  17. ribbon:
  18. NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule.RandomRule