4.负载均衡
4.1客户端负载均衡概述
- Ribbon概述
ribbon是Netflix提供的一个基于Http和TCP的客户端负载均衡工具 - 客户端负载均衡
- 负载均衡算法在客户端
- 客户端维护服务地址列表
- 服务端负载均衡
- 负载均衡算法在服务端
- 由负载均衡器维护服务地址列表
4.2简化RestTemplate调用
- 在RestTemplate上添加注解
```java @Configuration public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
2. 在调用时指定服务名
```java
@GetMapping("/goods2/{id}")
public Goods findGoodsById2(@PathVariable("id") int id){
//使用Ribbon简化RestTemplate
String 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);
}
}
- 使用配置方式
```yml
server:
port: 9000
eureka:
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