javascript
SpringCloud 入门教程(五): Ribbon实现客户端的负载均衡
接上節,假如我們的Hello world服務的訪問量劇增,用一個服務已經無法承載, 我們可以把Hello World服務做成一個集群。?
很簡單,我們只需要復制Hello world服務,同時將原來的端口8762修改為8763。然后啟動這兩個Spring Boot應用, 就可以得到兩個Hello World服務。這兩個Hello world都注冊到了eureka服務中心。這時候再訪問http://localhost:8761, 可以看到兩個hello world服務已經注冊。(服務與注冊參見Spring Cloud 入門教程(一): 服務注冊)。
1. ?客戶端的負載均衡
負載均衡可分為服務端負載均衡和客戶端負載均衡,服務端負載均衡完全由服務器處理,客戶端不需要做任何事情。而客戶端負載均衡技術,客戶端需要維護一組服務器引用,每次客戶端向服務端發請求的時候,會根據算法主動選中一個服務節點。常用的負載均衡算法有:?Round Robbin, ?Random,Hash,StaticWeighted等。
Spring 提供兩輛種服務調度方式:Ribbon+restful和Feign。Ribbon就是一個基于客戶端的負載均衡器, Ribbon提供了很多在HTTP和TCP客戶端之上的控制.?
Feign內部也已經使用了Ribbon, 所以只要使用了@FeignClient注解,那么這一章的內容也都是適用的。
下面就看看如何Spring Cloud如何用Ribbon來實現兩個Hello World服務的負載均衡。以下是Spring cloud的ribbon客戶端負載均衡架構圖。
hello world服務和ribbon均注冊到服務中心
service-hi工程跑了兩個副本,端口分別為8762,8763,分別向服務注冊中心注冊,?當sercvice-ribbon通過restTemplate調用service-Hellowworld的接口時,利用用ribbon進行負載均衡,會輪流的調用處于兩個不同端口的Hello world服務
?2. 創建一個Ribbon服務
1) 創建一個maven工程,取名叫service-ribbon, pom.xml文件如下:
?pom.xml
?
2). 創建主類ServiceRibbonApplication
1 package springcloud.helloworld.ribbon.service;2 3 import org.springframework.boot.SpringApplication;4 import org.springframework.boot.autoconfigure.SpringBootApplication;5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;6 import org.springframework.cloud.client.loadbalancer.LoadBalanced;7 import org.springframework.context.annotation.Bean;8 import org.springframework.web.client.RestTemplate;9 10 @SpringBootApplication 11 @EnableDiscoveryClient 12 public class ServiceRibbonApplication { 13 14 public static void main(String[] args) { 15 SpringApplication.run(ServiceRibbonApplication.class, args); 16 } 17 18 @Bean 19 @LoadBalanced 20 RestTemplate restTemplate() { 21 return new RestTemplate(); 22 } 23 }@EnableDiscoveryClient向服務中心注冊,并且注冊了一個叫restTemplate的bean。
@ LoadBalanced注冊表明,這個restRemplate是需要做負載均衡的。
?3). 創建獲取一個獲取Hello內容的service類
1 package springcloud.helloworld.ribbon.client;2 3 import org.springframework.beans.factory.annotation.Autowired;4 import org.springframework.stereotype.Service;5 import org.springframework.web.client.RestTemplate;6 7 @Service8 public class HelloService {9 @Autowired RestTemplate restTemplate; 10 11 public String getHelloContent() { 12 return restTemplate.getForObject("http://SERVICE-HELLOWORLD/",String.class); 13 } 14 }這里關鍵代碼就是,?restTemplate.getForObject方法會通過ribbon負載均衡機制, 自動選擇一個Hello word服務,
這里的URL是“http://SERVICE-HELLOWORLD/",其中的SERVICE-HELLOWORLD是Hello world服務的名字,而注冊到服務中心的有兩個SERVICE-HELLOWORLD。 所以,這個調用本質是ribbon-service作為客戶端根據負載均衡算法自主選擇了一個作為服務端的SERVICE-HELLOWORLD服務。然后再訪問選中的SERVICE-HELLOWORLD來執行真正的Hello world調用。
3. 啟動ribbon-service應用,我們就可以訪問http://localhost:8901/, 然后每次刷新可以看到以下兩種結果交替出現,表明實際調用的是在不同端口的不同的SERVICE-HELLOWORLD。
? ? ? ? ? ??
?
參考:?http://blog.csdn.net/forezp/article/details/69788938
博客:http://www.cnblogs.com/chry/p/7263281.html
總結
以上是生活随笔為你收集整理的SpringCloud 入门教程(五): Ribbon实现客户端的负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数模板~~~
- 下一篇: 斯特林公式(Stirling's app