[TOC]
## **1. 客戶端負載均衡 與 服務端負載均衡**
**1. 在客戶端負載均衡中,每個客戶端服務 都有一份自己要訪問的服務端清單,這些清單統統都是從Eureka服務注冊中心獲取的.**
**2. 而在服務端負載均衡中,只要負載均衡器維護一份服務端列表 。**
* **Spring Cloud Ribbon 是基于 Netflix 公司發布的開源項目 Ribbon 進行封裝的一套客戶端負載均衡器**
* 所以說,服務提供端只要負責將服務注冊到Eureka集群就行,具體調用還主要在服務調用端配置

## **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屬性的值**

~~~
@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 服務提供端和消費端

訪問正常,負載均衡有待測試
## **3. Ribbon負載均衡測試**
**Ribbon 在工作時分成兩步:**
**第1步**先選擇 Eureka Server ,它優先選擇在同一個區域內負載較少的server
**第2步**再根據用戶指定的策略,在從 Eureka Server 獲取的服務注冊列表中選擇一個地址。 其中Ribbon提供了多種策略:比如輪詢、隨機和根據響應時間加權等

### 3.1 新建一個服務提供者
負載均衡測試一定要有兩個以上,才可以測試
在新見一個模塊,然后將原來的服務提供者工程代碼賦值一份,改下端口配置即可


得到一個新的服務端工程

### 3.2 新建一個數據庫
用新數據庫,得到不同的數據模擬負載到不同的服務提供者

### 3.3 啟動新的服務提供者測試
第一次請求

第二次請求

證明負載已經生效
- 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
- 熔斷和降級