SpringCloud學習筆記(三)——應用間的通信

應用間的通信

主要有兩種:
HTTP vs RPC

  • 兩大配方的主角就是SpringCloudDubbo
  • Dubbo是個RPC框架,而SpringCloud的目標是微服務架構下的一站式解決方案
  • SpringCloud微服務架構下, 微服務之間使用HTTP restful的方式, HTTP restful的方式本身輕量易用, 適用性強,可以很容易的跨語言,跨平臺,或者與已有的系統交互
  • Dubbo本身的定位就是個RPC框架, 基於Dubbo開發的應用還是要依賴周邊的平臺和生態;
  • SpringCloud沒出來之前, Double在國內應用得相當廣泛

SpringCloud中服務間兩種restful調用方式

  • RestTemplate
  • Fein

RestTemplate

舉例:
要在訂單微服務裏面調用商品微服務裏面的查詢商品

  1. 在商品服務裏面,加一個Controller,叫做“ServerController”,供其他服務調用
  2. 在訂單服務裏面寫一個Controller,叫做“ClientController”,調用商品服務裏面的接口

使用Template的第一種獲取方(直接使用restTemplate,url寫死)

在這裏插入圖片描述
這種方式的缺點

  • url是寫死的,對方的地址可能不知道
  • 對方服務如果有兩臺,就牽扯到負載均衡

使用Template的第二種獲取方式(利用LoadBalancerClient獲取url)

其實第二種方式就是彌補第一種方式寫死url帶來的諸多不便
使用LoadBalancerClient對象,的choose方法, 傳入服務名,動態地取到url所需的各種信息
在這裏插入圖片描述

使用Template的第三種獲取方式(利用@LoadBalanced,可在restTemplate裏使用服務名)

寫一個config包,把restTemplate作爲一個Bean配置上去
在這裏插入圖片描述
在這裏插入圖片描述

Feign

在這裏插入圖片描述

使用步驟

第一步:
引入依賴:在這裏插入圖片描述
第二步:
在主類上加註解: @EnableFeignClients
第三步:
寫一個接口, 打上@FeignClient註解
在這裏插入圖片描述
第四步:
直接在接口裏面注入這個接口, 然後調用這個方法即可~
在這裏插入圖片描述

負載均衡器Ribbion

之前有說過Eureka是客戶端發現的方式,它的均衡是軟負載, 也就是客戶端會向服務器例如EurekaServer拉取已註冊的可用服務信息,然後根據負載均衡策略直接命中某臺服務器發送請求。
這整個過程都是在服務器端發起的,並不需要服務器的參與。
SpringCloud客戶端負載均衡就是Ribbion組件,它是基於netfix Ribbion實現的, 通過SpringCloud的封裝, 可以輕鬆面向服務的rest風格請求, 自動轉換成客戶端負載均衡服務調用

以下都是用到了Ribbion

  • RestTemplate
  • Feign
  • Zuul
    上面使用的@Balanced註解用的就是Ribbion組件

Ribbion實現軟負載核心有三點

  • 服務發現(依據服務的名字, 把該服務下的實例都找出來)
  • 服務選擇規則(如何從多個服務中選擇有效的服務)
  • 服務監聽(檢測失效的服務, 做到高效剔除)

Ribbion的主要組件有

  • ServerList
  • IRule
  • ServerListFilter

流程

首先, 通過ServerList獲取所有可用的服務列表
然後, 通過ServerListFilter過濾掉一部分服務地址
最後, 剩下的地址通過IRule選擇一個實例作爲最終目標結果
默認規則是輪詢
如果要改, 就這樣改:在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章