springcloud ribbon簡介
大家好,我是IT修真院深圳分院第十三期學員,一枚正直純潔善良的JAVA程式設計師。 今天給大家分享一下,修真院官網JAVA任務四里面的一個擴充套件:springboot和redis整合。
1 背景介紹 1.1 Springcloud Ribbon是什麼? Springcloud Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具,它基於NETflix Ribbon實現。通過Spring Cloud的封裝,可以讓我們輕鬆地面向服務的REST模板請求自動轉換成客戶端負載均衡的服務呼叫。 1.2 如何做負載均衡? 負載均衡在系統架構中是一個非常重要,在一個分散式系統中是必不可少的。負載均衡的話分為硬體負載均衡和軟體負載均衡。硬體負載均衡的話主要通過在伺服器節點安裝專門用於負載均衡的裝置,比如F5等; 而軟體負載均衡則是通過在伺服器安裝一些具有負載均衡功能或模組的軟體來完成請求分發工作的。 其中常見的軟體負載均衡有二種,一種是獨立程序單元,通過負載均衡策略,將請求轉發到不同的執行單元上,如NGINX,另一種是將負載均衡邏輯使用程式碼形式封裝到服務消費者的客戶端上,服務消費者客戶端維護了一份服務提供者的一份資訊表單,有了資訊表單,同負載均衡策略將請求分攤給多個服務提供者,從而實現負載均衡。 2 知識剖析 2.1 RestTemplate是什麼 1、RestTemplate是Sping Resources中一個訪問第三方RESTFUL API介面的網路請求框架。
2、RestTemplate是用來消費REST服務的,所以RestTemplate的主要方法都與REST的HTTP協議的一些方法緊密項鍊,如POST,GET,PUT,DELETE等
3、RestTemplate的支援XML和json資料格式,預設實現了序列化,可以自動將JSON轉換為實體
2.2 Ribbon支援的負載均衡策略 1、BestAvailableRule:選擇最小請求數 2、ClientConfigEnabledRoundRobinRule:輪詢 3、RandomRule:隨機選擇一個server。 4、RoundRobinRUle:輪詢選擇server 5、RetryRule:根據輪詢方式重試 6、WeightedResponseTimeRule:根據響應時間去分配一個weight,weight越低,被選中的可能性越低 7、ZoneAvoidanceRule:根據server的zone區域和可用性來輪詢選擇
3.常見問題
如何配置配置相應的Ribbon負載均衡策略
4 解決方案 在springcloud client的配置檔案中新增:
eureka-client:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
5.編碼實戰
6.擴充套件思考
7.參考文獻 CSDN、百度百科
8 更多討論 1、ribbon預設使用哪種負載均衡策略 ribbon預設使用的是ZoneAvoidanceRule,這種根據server的Zone區域和可用性輪詢的負載均衡策略。
2、ribbon和feign的區別 ribbo知識單獨的客戶端負載均衡的元件。在ribbon中如果要呼叫rest介面,就必須借用restTemplate。 feign不僅僅是集成了ribbon,還封裝了自己的一個http請求工具,除此之外,feign還封裝了hystrix熔斷器。
3、ribbon和hystrix熔斷器如何結合 新增相應依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在啟動類添加註解:
@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
@EnableHystrix
public class RibbondemoApplication {
public static void main(String[] args) {
SpringApplication.run(RibbondemoApplication.class, args);
}
}
在需要熔斷的地方添加註解:
@HystrixCommand(fallbackMethod = "hiError")
public String hiService(String name){
return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
}
public String hiError(String name){
return "hi,"+name+",sorry,error!";
}
}
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。
這裡是技能樹.IT修真院,成千上萬的師兄在這裡找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。