ribbon簡介
需要解決的問題:
① 如何在配置eureka client註冊中心時不去硬編碼eureka server的位址?
② 在微服務不同模組間進行通訊時,如何不去硬編碼服務提供者的位址?
③ 當部署多個相同微服務時,如何實現請求時的負載均衡?
實現負載均衡方式1:通過伺服器端實現負載均衡(nginx)
ribbon是netflix發布的雲中間層服務開源專案,其主要功能是提供客戶端實現負載均衡演算法。ribbon客戶端元件提供一系列完善的配置項如連線超時,重試等。簡單的說,ribbon是乙個客戶端負載均衡器,我們可以在配置檔案中load balancer後面的所有機器,ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨機連線等)去連線這些機器,我們也很容易使用ribbon實現自定義的負載均衡演算法。
下圖展示了eureka使用ribbon時的大致架構:
ribbon的使用
整合ribbon以及簡單使用
如何整合ribbon?
檢視spring cloud官方文件,搜尋ribbon。
① 首先引入ribbon依賴
按照官方的意思是需要加入以下依賴
org.springframework.cloud
spring-cloud-starter-ribbon
但是其實是不需要的加入這個依賴的,在spring-cloud-starter-eureka依賴中就已經包含了ribbon starter (上節已知spring-cloud-starter-eureka-server 是為編寫eureka server提供依賴,spring-cloud-starter-eureka是為編寫eureka client提供依賴),因此只需要eureka client具有spring-cloud-starter-eureka依賴即可。即在pom中需要有
org.springframework.cloud
spring-cloud-starter-eureka
② 如何使用ribbon
上節示例中是使用resttemplate進行eureka client(包括服務提供者以及服務消費者,在這裡其實是服務消費者使用resttemplate)之間的通訊,為resttemplate配置類新增@loadbalanced註解即可,如下所示:
@bean
@loadbalanced
public resttemplate resttemplate()
public user findbyid(@pathvariable long id)
執行測試:依次啟動eureka server和eureka clients(服務提供者和服務消費者)
在服務提供者端訪問4次
自定義ribbonclient
如何為服務消費者自定義ribbon client?
① **自定義ribbonclient
所謂的自定義ribbon client的主要作用就是使用自定義配置替代ribbon預設的負載均衡策略,注意:自定義的ribbon client是有針對性的,一般乙個自定義的ribbon client是對乙個服務提供者(包括服務名相同的一系列副本)而言的。自定義了乙個ribbon client 它所設定的負載均衡策略只對某一特定服務名的服務提供者有效,但不能影響服務消費者與別的服務提供者通訊所使用的策略。根據官方文件的意思,推薦在 springboot主程式掃瞄的包範圍之外進行自定義配置類。其實純**自定義ribbonclient的話有兩種方式:
方式一:在springboot主程式掃瞄的包外定義配置類,然後為springboot主程式新增@ribbonclient註解引入配置類
@configuration
public class testconfiguration
}
public @inte***ce excludefromcomponentscan
自定義配置類
@configuration
@excludefromcomponentscan
public class testconfiguration1
}
在springboot主程式上新增註解
@ribbonclient(name = "microservice-provider-user",configuration = testconfiguration1.class)
@componentscan(excludefilters = )
microservice-provider-user:
ribbon:
nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule
ribbon:
eureka:
enabled: false
《服務提供者名稱》:
ribbon:
listofservers: localhost:7901,localhost:7902
nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule
因為我的demo中引入了eureka,所以我的配置如下所示:
ribbon:
eureka:
enabled: false
microservice-provider-user:
ribbon:
listofservers: localhost:7901,localhost:7902
nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule
微服務之springcloud
分布式架構的概念 多個子模組相互協作才能完成業務流程,系統之間需要進行通訊。優點 1 把模組拆分,使用介面通訊,降低模組之間的耦合度。2 把專案拆分成若干個子專案,不同團隊負責不同子專案。3 增加功能時只需要再增加子專案,呼叫其他系統的介面 4 可以靈活進行分布式部署 缺點 1 系統之間互動需要使用...
SpringCloud微服務之OpenFeign
在之前進行微服務的呼叫用的是ribbon resttemplate,就像這樣 這樣呼叫微服務是更偏向面向restfull風格,但偏離了面向介面程式設計 使用openfeign,openfeign底層還是用的ribbon。新增openfeign依賴 org.springframework.cloudg...
Spring Cloud 微服務之Feign(七)
新增服務 測試使用 多次訪問 http localhost 8080 get 1可以看到feign預設採用輪詢演算法依次在每乙個服務方進行訪問 利用feign我們只需要為feign客戶端定義的業務介面新增乙個服務降級處理的實現類即可 feign提供了日誌列印功能,我們可以通過配置來調整日誌級別,從而...