4.负载均衡
4.1客户端负载均衡概述
- Ribbon概述
ribbon是Netflix提供的一个基于Http和TCP的客户端负载均衡工具 - 客户端负载均衡

- 负载均衡算法在客户端
- 客户端维护服务地址列表
- 服务端负载均衡

- 负载均衡算法在服务端
- 由负载均衡器维护服务地址列表
4.2简化RestTemplate调用
- 在RestTemplate上添加注解
```java @Configuration public class RestTemplateConfig {
@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}
2. 在调用时指定服务名```java@GetMapping("/goods2/{id}")public Goods findGoodsById2(@PathVariable("id") int id){//使用Ribbon简化RestTemplateString url = "http://eureka-provider/goods/findOne/"+id;Goods goods = restTemplate.getForObject(url, Goods.class);return goods;}
4.3负载均衡策略
4.3.1策略
- 随机
- 轮询
- 最小并发
- 过滤
- 响应时间
- 轮询重试
- 性能可用性
4.3.2 使用负载均衡
- 使用bean的方式
- 在消费者端配置负载均衡策略Bean
```java package com.itheima.consumer.config;
- 在消费者端配置负载均衡策略Bean
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() {
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 {
public static void main(String[] args) {SpringApplication.run(ConsumerApp.class, args);}
}
- 使用配置方式```ymlserver:port: 9000eureka:instance:hostname: localhost # 主机名client:service-url:defaultZone: http://localhost:8761/eureka## defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信spring:application:name: eureka-consumer # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径# 配置的方式设置Ribbon的负载均衡策略EUREKA-PROVIDER:ribbon:NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule.RandomRule
