目錄
一、服務(wù)拆分
1、案例一:多端口微服務(wù)
2、案例二:服務(wù)遠(yuǎn)程調(diào)用
二、Eureka
1、Eureka 原理分析
2、Eureka 服務(wù)搭建(注冊(cè) eureka 服務(wù))
3、Eureka 服務(wù)注冊(cè)(注冊(cè)其他服務(wù))
4、Eureka 服務(wù)發(fā)現(xiàn)(服務(wù)拉?。?/p>
三、Ribbon 負(fù)載均衡?
1、負(fù)載均衡原理
2、負(fù)載均衡策略
3、饑餓加載
一、服務(wù)拆分
通過 2 個(gè)案例,學(xué)習(xí)如何實(shí)現(xiàn)服務(wù)拆分。
- 都需要引入 web 的起步依賴:
1、案例一:多端口微服務(wù)
需求:
- 將 Order 和 User 模塊的服務(wù)進(jìn)行拆分,通過不同的 URL 進(jìn)行服務(wù)調(diào)用。
(1)項(xiàng)目結(jié)構(gòu)
- 為 2 個(gè)模塊都添加上各自的 Controller;
(2)編寫 Controller
- 寫一個(gè)簡(jiǎn)單的 Controller,在頁面上顯示字符串即可;
- UserController 類似;
(3)設(shè)置不同的端口,啟動(dòng) application
- 為兩個(gè)模塊設(shè)置不同的服務(wù)器端口(user 設(shè)置 8081、order 設(shè)置 8080);
- 將 Order 模塊和 User 模塊的 Application 都啟動(dòng)起來;
- 訪問頁面 /user/query 和 /order/query
2、案例二:服務(wù)遠(yuǎn)程調(diào)用
需求:
- 在 Order 的實(shí)體類中包含了 User 類型的屬性,當(dāng)根據(jù)訂單號(hào)獲取訂單信息時(shí),由于 Order 和 User 的數(shù)據(jù)庫訪問也是獨(dú)立的,導(dǎo)致 User 屬性為 null。
- 因此在 Order 模塊中需要調(diào)用 User 模塊的查詢 user 的功能來獲取 User 信息,再賦值給 Order。
(1)項(xiàng)目結(jié)構(gòu)
- 兩個(gè)模塊都需要?jiǎng)?chuàng)建對(duì)應(yīng)的實(shí)體類;
- Order 還需要?jiǎng)?chuàng)建 service 和 mapper;
(2)OrderController 和 UserController
- 兩個(gè)模塊的 Controller 都需要添加相應(yīng)的方法;
(3)OrderMapper?
- 為了簡(jiǎn)單起見,這里不引入連接數(shù)據(jù)庫操作;
- 直接在 mapper 中實(shí)現(xiàn)返回一個(gè) User 的方法;
(4)OrderSrevice
OrderSrevice 需要兩個(gè)屬性:OrderMapper 和 RestTemplate;
其中 RestTemplate 就是幫助我們實(shí)現(xiàn)遠(yuǎn)程服務(wù)調(diào)用的關(guān)鍵;
- url 屬性:表示發(fā)送的請(qǐng)求;
- responseType 屬性:表示返回的數(shù)據(jù)類型(默認(rèn)是 JSON);
- getForObject() 方法:表示發(fā)送 get 請(qǐng)求;
- postForObject() 方法:表示發(fā)送 post 請(qǐng)求;
(5)啟動(dòng)兩個(gè)模塊的 application
- 訪問 /order/queryForOrderById/xxx;
二、Eureka
1、Eureka 原理分析
觀看下面視頻:
08-Eureka-eureka原理分析_嗶哩嗶哩_bilibili
2、Eureka 服務(wù)搭建(注冊(cè) eureka 服務(wù))
(1)創(chuàng)建 eureka 服務(wù)模塊(eureka 為子工程)
- 子工程的 pom 文件中引入依賴;
- 父工程的 pom 文件做好依賴管理;
(2)編寫 application 配置文件,注冊(cè) eureka
- 設(shè)置服務(wù)端口;
- 設(shè)置 eureka 服務(wù)名稱;
- 設(shè)置 eureka 服務(wù)地址;
為什么?eureka 自身的服務(wù)地址信息也是 client?
- eureka 也是一個(gè)微服務(wù),所以 eureka 啟動(dòng)的時(shí)候,會(huì)將自己也注冊(cè)到 eureka 上。
- 這是為了 eureka 之間的集群通信,當(dāng)有多個(gè) eureka 時(shí),defaultZone 就需要寫上多個(gè) URL。
(3)啟動(dòng) application,訪問 eureka
- 為啟動(dòng)類添加 @EnableEurekaServer 注解;
- 訪問 localhost:10086/eureka,則會(huì)跳轉(zhuǎn)到 eureka 的管理界面;
- instances 表示注冊(cè)到 eureka 的服務(wù)示例(服務(wù)列表);
3、Eureka 服務(wù)注冊(cè)(注冊(cè)其他服務(wù))
(1)引入依賴
- 分別在 Order 模塊和 User 模塊的 pom 文件中,都添加上如下依賴;
- 注意:使用的是客戶端 client 的依賴;
(2)編寫 eureka 地址信息
這一步驟跟前面的是一樣的。
- 設(shè)置服務(wù)端口;
- 設(shè)置 eureka 服務(wù)名稱;
- 設(shè)置 eureka 服務(wù)地址;
(3)將 User 和 Order 的 application 都啟動(dòng)
- 在 Service 中添加 SpringBoot 服務(wù),即可一次性啟動(dòng);
- 訪問 /localhost:10086,來到 eureka 管理頁面;
- 此時(shí)已經(jīng)可以看到服務(wù)列表已經(jīng)有 3 個(gè)服務(wù)了;
(4)多實(shí)例部署
如果我們想要 User 有多個(gè)服務(wù)實(shí)例可以添加到服務(wù)列表上,可以復(fù)制多幾份 User 的運(yùn)行配置。
- 選中要復(fù)制的運(yùn)行配置,點(diǎn)擊復(fù)制;
- 在 VM Option 中,添加參數(shù) server.port = 一個(gè)沒用過的端口;
- 啟動(dòng) 5 個(gè) application,觀察服務(wù)列表;
- ?可以發(fā)現(xiàn),Order 和 User 各多了 1 個(gè)服務(wù);
4、Eureka 服務(wù)發(fā)現(xiàn)(服務(wù)拉?。?/h3>
服務(wù)發(fā)現(xiàn)就是服務(wù)拉取。
服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表(比如獲取 UserService 的服務(wù)列表,內(nèi)含?2 個(gè)服務(wù)),然后在對(duì)服務(wù)列表做負(fù)載均衡。
基于前面“服務(wù)拆分”的“案例二:服務(wù)遠(yuǎn)程調(diào)用”,我們來學(xué)習(xí)服務(wù)拉取。
(1)獲取服務(wù)列表
- 修改 OrderService 中的代碼,用服務(wù)名代替 ip:port;
- (既然需要負(fù)載均衡,因此肯定無法指定 ip:port,所以使用服務(wù)名代替)
(2)添加負(fù)載均衡注解 @LoadBalanced
- 在 order-service 項(xiàng)目的啟動(dòng)類 OrderApplication 中的 RestTemplate 添加負(fù)載均衡注解:
(3)啟動(dòng) application,查詢 Order
- 啟動(dòng)下面 5 個(gè) application;
- 然后我們選擇使用 8080 端口的 Order 來獲取信息(也可以用 8083 的);
- 發(fā)送 4 次獲取 Order 信息的請(qǐng)求,id 從 1~ 4;
- 觀察 2 個(gè) User 啟動(dòng)類的輸出,都輸出了 2 次信息;
- 說明對(duì) user-service 服務(wù)列表做到了負(fù)載均衡;
三、Ribbon 負(fù)載均衡?
Ribbon 是一個(gè)基于 HTTP 和 TCP?客戶端的負(fù)載均衡的工具。
它可以在客戶端的 application 配置文件中,配置 RibbonServerList(服務(wù)端列表),使用 HttpClient 或 RestTemplate 模擬 http 請(qǐng)求,但是步驟比較繁瑣。
1、負(fù)載均衡原理
2、負(fù)載均衡策略
Ribbon 的負(fù)載均衡規(guī)則是一個(gè)叫做 IRule 的接口來定義的,每一個(gè)子接口都是一種規(guī)則。
(1)Java 可以使用的負(fù)載均衡規(guī)則
(2)負(fù)載均衡規(guī)則修改方法
默認(rèn)情況下,使用的是 ZoneAvoidanceRule。
需要注意的是:
- 第一種方式,可以對(duì)所有 order-service 模塊訪問的服務(wù)列表做到負(fù)載均衡;(大)
- 第二種方式,只能對(duì)配置文件中指定的 service 做到負(fù)載均衡;(?。?/li>
3、饑餓加載
Ribbon 默認(rèn)是采用懶加載,即第一次訪問時(shí)才會(huì)去創(chuàng)建 LoadBalanceClient,請(qǐng)求時(shí)間會(huì)很長(zhǎng)。
而饑餓加載則會(huì)在項(xiàng)目啟動(dòng)時(shí)創(chuàng)建,降低第一次訪問的耗時(shí),通過下面配置開啟饑餓加載:文章來源:http://www.zghlxwxcb.cn/news/detail-713472.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-713472.html
- enabled = true,表示開啟饑餓加載;
- clients = user-service,表示指定對(duì) user-service 這個(gè)服務(wù)饑餓加載;
- clients 其實(shí)是數(shù)組形式,可以協(xié)商多個(gè)服務(wù);
到了這里,關(guān)于[SpringCloud] Eureka 與 Ribbon 簡(jiǎn)介的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!