SpringCloud微服務之 Ribbon

2021-10-09 17:07:21 字數 3487 閱讀 9878

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提供了日誌列印功能,我們可以通過配置來調整日誌級別,從而...