2021-12-14 周二
## Ribbon介紹
Ribbon是Netfix發布的負載均衡器。
為Ribbon配置服務提供者地址后,基于負載均衡算法(內置輪詢,隨機等),自動幫消費者去請求。
## 集成Ribbon
注意本文使用的版本:
``` xml
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
<spring-boot-version>2.2.7.RELEASE</spring-boot-version>
```
前提是注冊中心用的Eureka。
### 1.Eureka Client添加依賴
不用添加依賴,因為在eureka-client依賴里默認就集成了Ribbon。(你可以點進eureka-client的依賴內,找到如下依賴關系)

### 2.為`RestTemplate`添加`@LoadBalanced`注解
``` java
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
```
### 3.Controller中使用`RestTemplate`請求微服務地址
``` java
@Autowired
private RestTemplate restTemplate;
@GetMapping("/cardRand")
public Result cardRand(){
ResultObject<CardVo> result = (ResultObject<CardVo>) restTemplate.getForObject(
"http://mic-card/card/admin/card/rand",
ResultObject.class
);
return result;
}
```
### 4.驗證
啟動2個`mic-card`微服務的提供者,一邊刷新瀏覽器請求,一邊查看日志控制臺輸出。
能看到2個控制臺均有日志輸出,則說明微服務提供者已經有負載均衡了。

## Ribbon提供的7中負載均衡策略
* com.netflix.loadbalancer.RoundRobinRule - 輪詢
* com.netflix.loadbalancer.RandomRule - 隨機
* com.netflix.loadbalancer.RetryRule - 重試,先按RoundRobinRule進行輪詢,如果失敗就在指定時間內進行重試
* com.netflix.loadbalancer.WeightedResponseTimeRule - 權重,響應速度越快,權重越大,越容易被選中。
* com.netflix.loadbalancer.BestAvailableRule - 先過濾掉不可用的處于斷路器跳閘轉態的服務,然后選擇一個并發量最小的服務
* com.netflix.loadbalancer.AvailabilityFilteringRule - 先過濾掉故障實例,再選擇并發量較小的實例
* com.netflix.loadbalancer.ZoneAvoidanceRule - 默認規則,復合判斷server所在區域的性能和server的可用性進行服務的選擇。
## 自定義Ribbon負債均衡策略
``` java
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule(){
// 也可以自己做算法實現
// return new RandomRule();
return new RoundRobinRule();
}
}
```
- Redis來回摩擦
- redis的數據結構SDS和DICT
- redis的持久化和事件模型
- Java
- 從何而來之Java IO
- 發布Jar包到公共Maven倉庫
- Java本地方法調用
- 面試突擊
- Linux
- Nginx
- SpringBoot
- Springboot集成Actuator和SpringbootAdminServer監控
- SpringCloud
- Spring Cloud初識
- Spring Cloud的5大核心組件
- Spring Cloud的注冊中心
- Spring Cloud注冊中心之Eureka
- Spring Cloud注冊中心之Consul
- Spring Cloud注冊中心之Nacos
- Spring Cloud的負載均衡之Ribbon
- Spring Cloud的服務調用之Feign
- Spring Cloud的熔斷器
- Spring Cloud熔斷器之Hystrix
- Spring Cloud的熔斷器監控
- Spring Cloud的網關
- Spring Cloud的網關之Zuul
- Spring Cloud的配置中心
- Spring Cloud配置中心之Config Server
- Spring Cloud Config配置刷新
- Spring Cloud的鏈路跟蹤
- Spring Cloud的鏈路監控之Sleuth
- Spring Cloud的鏈路監控之Zipkin
- Spring Cloud集成Admin Server
- Docker
- docker日常基本使用
- docker-machine的基本使用
- Kubernetes
- kubernetes初識
- kubeadm安裝k8s集群
- minikube安裝k8s集群
- k8s的命令行管理工具
- k8s的web管理工具
- k8s的相關發行版
- k3s初識及安裝
- rancher的安裝及使用
- RaspberryPi
- 運維
- 域名證書更新
- 騰訊云主機組建內網
- IDEA插件開發
- 第一個IDEA插件hello ide開發
- 千呼萬喚始出來的IDEA筆記插件mdNote
- 大剛學算法
- 待整理
- 一些概念和知識點
- 位運算
- 數據結構
- 字符串和數組
- LC242-有效的字母異位詞
- 鏈表
- LC25-K個一組翻轉鏈表
- LC83-刪除有序單鏈表重復的元素
- 棧
- LC20-有效的括號
- 隊列
- 雙端隊列
- 優先隊列
- 樹
- 二叉樹
- 二叉樹的遍歷
- 二叉樹的遞歸序
- 二叉樹的前序遍歷(遞歸)
- 二叉樹的前序遍歷(非遞歸)
- 二叉樹的中序遍歷(遞歸)
- 二叉樹的中序遍歷(非遞歸)
- 二叉樹的后序遍歷(遞歸)
- 二叉樹的后序遍歷(非遞歸)
- 二叉樹的廣度優先遍歷(BFS)
- 平衡二叉樹
- 二叉搜索樹
- 滿二叉樹
- 完全二叉樹
- 二叉樹的打印(二維數組)
- 樹的序列化和反序列化
- 前綴樹
- 堆
- Java系統堆優先隊列
- 集合數組實現堆
- 圖
- 圖的定義
- 圖的存儲方式
- 圖的Java數據結構(鄰接表)
- 圖的表達方式及對應場景創建
- 圖的遍歷
- 圖的拓撲排序
- 圖的最小生成樹之Prim算法
- 圖的最小生成樹之Kruskal算法
- 圖的最小單元路徑之Dijkstra算法
- 位圖
- Java實現位圖
- 并查集
- Java實現并查集
- 滑動窗口
- 單調棧
- 排序
- 冒泡排序BubbleSort
- 選擇排序SelectSort
- 插入排序InsertSort
- 插入排序InsertXSort
- 歸并排序MergeSort
- 快速排序QuickSort
- 快速排序優化版QuickFastSort
- 堆排序HeapSort
- 哈希Hash
- 哈希函數
- guava中的hash函數
- hutool中的hash函數
- 哈希表實現
- Java之HashMap的實現
- Java之HashSet的實現
- 一致性哈希算法
- 經典問題
- 荷蘭國旗問題
- KMP算法
- Manacher算法
- Go