[TOC]
## **1. 客户端负载均衡 与 服务端负载均衡**
**1. 在客户端负载均衡中,每个客户端服务 都有一份自己要访问的服务端清单,这些清单统统都是从Eureka服务注册中心获取的.**
**2. 而在服务端负载均衡中,只要负载均衡器维护一份服务端列表 。**
* **Spring Cloud Ribbon 是基于 Netflix 公司发布的开源项目 Ribbon 进行封装的一套客户端负载均衡器**
* 所以说,服务提供端只要负责将服务注册到Eureka集群就行,具体调用还主要在服务调用端配置
![](https://img.kancloud.cn/d5/da/d5dafcb41b16e2787b5d4b652e4c39f8_1020x514.png)
## **2. Ribbon 服务调用配置**
### **2.1 应用消费端配置**
**1. 修改pom文件加入 Eureka client启动器, eureka会自动引入Ribbon**
~~~
<!-- Ribbon 相关依赖,eureka会自动引入Ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入公共接口部分 -->
<dependency>
<groupId>com.tuna.springcloud</groupId>
<artifactId>microservice-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
~~~
由于依赖了spring-cloud-starter-netflix-eureka-client,会自动添加spring-cloud-starter-netflix-ribbon依赖
**2. 修改yml,配置Eureka服务发现**
```
eureka:
client:
registerWithEureka: false # 服务注册,false表示不将本消费者注册到 Eureka 服务器
fetchRegistry: true # 服务发现,true从 Eureka 服务器中获取注册信息
serviceUrl:
defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/
```
**3. 添加配置类,配置负载均衡**
> **@LoadBalanced表示这个RestTemplate开启负载均衡,在调用服务提供者的接口时,可使用 服务名称 替代真实IP地址。服务名称 就是服务提供者在application.yml中配置的spring.application.name属性的值**
![](https://img.kancloud.cn/ec/dd/ecddba786e7f6ad9419b31aabe716693_402x183.png)
~~~
@Configuration //标识配置类
public class ConfigBean {
@LoadBalanced
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
~~~
**4. 修改调用地址为 服务名称,不必在写ip地址,这样的好处是 无论是有几个服务提供者,消费端只需指定服务名称去调用即可,不用担心ip和端口**
```
//private static final String REST_URL_PREFIX = "http://localhost:8001";
//修改为商品提供者向Eureka服务器中注册的地址
private static final String REST_URL_PREFIX = "http://microservice-product";
```
完整消费端代码
```
@RestController
public class ProductController_Consumer {
//private static final String REST_URL_PREFIX = "http://localhost:8001";
//修改为商品提供者向Eureka服务器中注册的地址
private static final String REST_URL_PREFIX = "http://microservice-product";
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer/product/add")
public boolean add(Product product) {
return restTemplate.postForObject(REST_URL_PREFIX + "/product/add", product, Boolean.class);
}
@RequestMapping(value = "/consumer/product/get/{id}")
public Product get(@PathVariable("id") Long id) {
return restTemplate.getForObject(REST_URL_PREFIX + "/product/get/" + id, Product.class);
}
@RequestMapping(value = "/consumer/product/list")
public List<Product> list() {
return restTemplate.getForObject(REST_URL_PREFIX + "/product/list", List.class);
}
}
```
5. 测试
启动Eureka 服务提供端和消费端
![](https://img.kancloud.cn/07/1b/071b4ae0124e4bed0cd4d437360dac7b_718x125.png)
访问正常,负载均衡有待测试
## **3. Ribbon负载均衡测试**
**Ribbon 在工作时分成两步:**
**第1步**先选择 Eureka Server ,它优先选择在同一个区域内负载较少的server
**第2步**再根据用户指定的策略,在从 Eureka Server 获取的服务注册列表中选择一个地址。 其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权等
![](https://img.kancloud.cn/88/c4/88c473824e4f71417b6874650ae5fe80_795x448.png)
### 3.1 新建一个服务提供者
负载均衡测试一定要有两个以上,才可以测试
在新见一个模块,然后将原来的服务提供者工程代码赋值一份,改下端口配置即可
![](https://img.kancloud.cn/67/c2/67c2237e40ed1189fb0c498c9b8ead71_720x531.png)
![](https://img.kancloud.cn/3b/98/3b98bb1781cbc4087c788fee7b7f5ada_734x552.png)
得到一个新的服务端工程
![](https://img.kancloud.cn/96/a7/96a7c0f6d44e9d3b55812f4d43c158ac_362x299.png)
### 3.2 新建一个数据库
用新数据库,得到不同的数据模拟负载到不同的服务提供者
![](https://img.kancloud.cn/4e/63/4e63fd93c2aea0b823dffa4d1f10adaa_966x313.png)
### 3.3 启动新的服务提供者测试
第一次请求
![](https://img.kancloud.cn/62/07/620754c12aaf8340eaa02a1ec9b03155_529x151.png)
第二次请求
![](https://img.kancloud.cn/3c/70/3c704952c98538a2edfa372787633f90_491x124.png)
证明负载已经生效
- springcloud
- springcloud的作用
- springboot服务提供者和消费者
- Eureka
- ribbon
- Feign
- feign在微服务中的使用
- feign充当http请求工具
- Hystrix 熔断器
- Zuul 路由网关
- Spring Cloud Config 分布式配置中心
- config介绍与配置
- Spring Cloud Config 配置实战
- Spring Cloud Bus
- gateway
- 概念讲解
- 实例
- GateWay
- 统一日志追踪
- 分布式锁
- 1.redis
- springcloud Alibaba
- 1. Nacos
- 1.1 安装
- 1.2 特性
- 1.3 实例
- 1. 整合nacos服务发现
- 2. 整合nacos配置功能
- 1.4 生产部署方案
- 环境隔离
- 原理讲解
- 1. 服务发现
- 2. sentinel
- 3. Seata事务
- CAP理论
- 3.1 安装
- 分布式协议
- 4.熔断和降级
- springcloud与alibba
- oauth
- 1. abstract
- 2. oauth2 in micro-service
- 微服务框架付费
- SkyWalking
- 介绍与相关资料
- APM系统简单对比(zipkin,pinpoint和skywalking)
- server安装部署
- agent安装
- 日志清理
- 统一日志中心
- docker安装部署
- 安装部署
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- ES索引管理
- 定时清理数据
- index Lifecycle Management
- 没数据排查思路
- ELK自身组件监控
- 多租户方案
- 慢查询sql
- 日志审计
- 开发
- 登录认证
- 链路追踪
- elk
- Filebeat
- Filebeat基础
- Filebeat安装部署
- 多行消息Multiline
- how Filebeat works
- Logstash
- 安装
- rpm安装
- docker安装Logstash
- grok调试
- Grok语法调试
- Grok常用表达式
- 配置中常见判断
- filter提取器
- elasticsearch
- 安装
- rpm安装
- docker安装es
- 使用
- 概念
- 基础
- 中文分词
- 统计
- 排序
- 倒排与正排索引
- 自定义dynamic
- 练习
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- kibana
- 安装
- docker安装
- rpm安装
- 整合
- 收集日志
- 慢sql
- 日志审计s
- 云
- 分布式架构
- 分布式锁
- Redis实现
- redisson
- 熔断和降级