SpringCloud版本:Finchley.SR2
SpringBoot版本:2.0.3.RELEASE
源碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorialsgit
寫博客一個多月了,斷斷續續的更新,今天有小夥伴催更新了,很高興,說明個人分享是有意義的。web
因而乎,更新來了,還順便給該系列教程改了個名兒《最適合入門的SpringCloud教程》算法
經過以前的幾篇文章,在代碼中會有三個項目,分別是兩個註冊中心和一個客戶端,以下圖:spring
今天將會在這個代碼的基礎上:服務器
Tips:須要瞭解過RestTemplate的使用 SpringBoot圖文教程17—上手就會 RestTemplate 使用指南「Get Post」「設置請求頭」app
在服務提供者eureka-client-8803中寫入一個TestController類負載均衡
package com.lby.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @author luxiaoyang * @create 2020-04-02-20:13 */ @RestController public class TestController { /** * @Value("${server.port}") 讀取application配置文件中的值 * 賦值到成員變量上 * * ${server.port} 參數爲 application配置文件中的key */ @Value("${server.port}") private String port; /** * @RequestParam 獲取Request參數的 用於RestFul風格中 * @PathVariable 獲取路徑中的參數 */ @GetMapping("showImgById") public String showImgById(@RequestParam("id") Integer id){ return "查詢到id爲:"+id+"的信息,使用端口號爲:"+port; } }
IDEA 中 默認項目啓動是單例的,即一個項目只可以在一個端口號啓動一次。可是在IDEA 其實是支持多實例的,一個項目能夠經過修改端口號啓動屢次。ide
以eureka-client-8803爲例spring-boot
1.修改eureka-client-8803的IDEA啓動設置工具
IDEA的版本不一樣,還會出現如圖所示的配置
2.在 8803 端口號啓動項目
3.不要關閉 8803 這個服務,而後直接修改yml中的端口號爲8804,再次經過啓動類啓動
經過以上步驟,就啓動了兩個服務提供者,用來模擬集羣,效果以下
根據以前教程中的步驟,再建立一個客戶端eureka-consumer-8805做爲消費者
pom配置
<dependencies> <!-- Eureka 客戶端的依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- web的依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 測試的依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
application配置文件
server: port: 8805 #指定當前服務的名稱 會註冊到註冊中心 spring: application: name: eureka-consumer-8805 # 指定 服務註冊中心的地址 eureka: client: serviceUrl: defaultZone: http://localhost:8801/eureka,http://localhost:8800/eureka
啓動類
package com.lby; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * @author luxiaoyang * @create 2020-04-02-20:43 */ @EnableDiscoveryClient @SpringBootApplication public class EurekaConsumer8805 { public static void main(String[] args) { SpringApplication.run(EurekaConsumer8805.class,args); } }
Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具。
Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的負載均衡算法。
關於Ribbon的簡介,有一個名詞須要進行解釋,客戶端負載均衡?
負載均衡是一種很是常見的技術,例如:Nginx,F5。
對於Nginx來講,在Nginx中存儲一份服務端的清單,用戶的請求到達Nginx以後,Nginx會根據負載均衡策略從服務清單中選擇一臺服務器去處理客戶端的請求。
服務清單存儲在負載均衡服務中,這就是服務端負載均衡。
而客戶端負責均衡,例如Ribbon,自己是不存儲可用服務清單的,須要服務清單的時候經過服務節點找註冊中心獲取。
1.在服務消費者 eureka-consumer-8805中導入Ribbon的依賴
<!--ribbon--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
2.在啓動類中寫RestTemplate+Ribbon的配置
1.在消費者中建立接口 經過RestTemplate調用服務提供者
package com.lby.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * @author luxiaoyang * @create 2020-04-02-20:49 */ @RestController public class ConsumerController { @Autowired private RestTemplate restTemplate; /** * 調用服務提供者 */ @RequestMapping("/consumer/showConsumer") public String showConsumer(){ /** * 經過Ribbon 發送服務調用 用的是RestTemplate * RestTemplate 自己沒有負載均衡的能力 * * 注意:RestTemplate請求地址中寫的不是 ip+端口號 而是被調用服務的服務名稱 */ String object = restTemplate.getForObject("http://eureka-client-8803/showImgById?id=1", String.class); return "查詢到服務提供者的數據,"+object; } }
注意:RestTemplate請求地址中寫的不是 ip+端口號 而是被調用服務的服務名稱
2.重啓全部的服務,兩個服務提供者,一個服務消費者
3.訪問服務消費者的接口
請求地址:http://localhost:8805/consumer/showConsumer
能夠看到每次請求端口號不同
以上就是RestTemplate+Ribbon的負載均衡的基本使用
恭喜你完成了本章的學習,爲你鼓掌!若是本文對你有幫助,請幫忙點贊,評論,轉發,這對做者很重要,謝謝。
要掌握SpringCloud更多的用法,請持續關注本系列教程。