一敷硅、兩種應用間的通信方式
兩種應用間的通信方式
二怎棱、Spring Cloud中兩種restful調(diào)用方式:(示例:用訂單服務調(diào)用商品服務的接口)
Spring Cloud中兩種restful調(diào)用方式
2.1 Spring Cloud中第一種restful調(diào)用方式:如下的示例,把商品服務理解為Server端拥诡,訂單服務理解為Client端:用RestTemplate去調(diào)用另一個服務触趴,這種的缺陷在于要硬編碼url
訂單調(diào)用商品服務
(1)商品服務定義為Server端
(2)新建ClientController,即Client端渴肉,此時Order去調(diào)用Product
2.2 Spring Cloud中第二種restful調(diào)用方式:通過loadBananceClient
!(1)查看Eureka中的服務冗懦,此時Product有兩個服務
(2)通過serviceId來獲取Host與Port
2.3 Spring Cloud中第三種restful調(diào)用方式:
(1)使用LocaBanance注解調(diào)用
(2)注入RestTemplate,然后應用/子url
三、負載均衡器:Ribbon
客戶端向服務器宾娜,例如Eureka Server拉取可利用的服務批狐,然后根據(jù)負載均衡策略直接命中 哪臺服務器訪問請求,整個過程都是在客戶端進行的前塔,SPring Cloud的客戶端組件就是Ribbon組件嚣艇,在二中實例中使用LoadBance注解或者LoadBananceClient,用到的就是Ribbon組件华弓。添加LoadBalance注解后食零,Ribbon會基于某種規(guī)則自動實現(xiàn)負載均衡算法
Ribbon實現(xiàn)軟負載均衡的核心
-
通過ServerList發(fā)現(xiàn)所有可用的服務,通過ServerListFilter剔除無效的服務寂屏,然后通過IRule選擇合適的服務
流程
四贰谣、追蹤負載均衡源碼
五娜搂、使用Feign來實現(xiàn)應用間的通信
-
1、在調(diào)用方引入依賴(這里就是Order)
在調(diào)用方引入依賴 -
2吱抚、在調(diào)用啟動類上加注解
在調(diào)用啟動類上加注解 -
3百宇、定義調(diào)用哪些接口
定義調(diào)用哪些接口 -
4、使用服務端的方法
使用
六秘豹、實戰(zhàn):在訂單端調(diào)用商品的服務
6.1 開發(fā)商品的業(yè)務
商品端開發(fā)服務
6.2訂單端調(diào)用
在order Client端定義接口
6.3調(diào)用接口
調(diào)用Product的方法
七携御、扣庫存
在Product中定義實現(xiàn),然后在Order服務中使用
八既绕、解決問題:雖然實現(xiàn)了功能啄刹,在訂單中調(diào)用商品服務,但是還是有如下的問題
8.1 服務端(Product暴漏了服務端的實體類(ProductInfo)凄贩,這在遠程調(diào)用里是不被允許的
服務端(Product暴漏了服務端的實體類(ProductInfo))
8.2 客戶端重復定義服務端的類(客戶端調(diào)用服務端誓军,客戶端需要依賴服務端的部分類,之前的解決方案是重復定義一遍疲扎,這是十分不好的昵时。對象屬于哪個服務就在哪個地方定義)
ProductInfo實際上是服務端的類,這里為了實現(xiàn)業(yè)務重復定義
8.3為了使用FeignClient评肆,將服務端的接口定義在客戶端里债查。這顯然是不合理的。服務端應該定義接口瓜挽,客戶端直接調(diào)用即可。
8.4為了解決如上的問題征绸,將服務端抽象為三個模塊久橙。
如下三個模塊
- productServer:所有的業(yè)務邏輯,Controller管怠、Service
- productClient:對外暴漏的接口
-
productCommon:被外部服務調(diào)用也會被自己調(diào)用的對象淆衷。
模塊的依賴關(guān)系九、異步服務調(diào)用
異步服務調(diào)用
常見的消息中間件
十渤弛、RabbitMQ的安裝:在Docker中安裝
十一祝拯、微服務和容器:天生的一對
天生一對
微服務的核心