Ribbon詳解與例項

2022-06-29 19:03:11 字數 4355 閱讀 9938

ribbon是乙個為客戶端提供負載均衡功能的服務,它內部提供了乙個叫做iloadbalance的介面代表負載均衡器的操作,比如有新增伺服器操作、選擇伺服器操作、獲取所有的伺服器列表、獲取可用的伺服器列表等等。

需要解決的問題:

① 如何在配置eureka client註冊中心時不去硬編碼eureka server的位址?

② 在微服務不同模組間進行通訊時,如何不去硬編碼服務提供者的位址?

③ 當部署多個相同微服務時,如何實現請求時的負載均衡? 

ribbon是什麼?

ribbon是netflix發布的雲中間層服務開源專案,其主要功能是提供客戶端實現負載均衡演算法。ribbon客戶端元件提供一系列完善的配置項如連線超時,重試等。簡單的說,ribbon是乙個客戶端負載均衡器,我們可以在配置檔案中load balancer後面的所有機器,ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨機連線等)去連線這些機器,我們也很容易使用ribbon實現自定義的負載均衡演算法。

下圖展示了eureka使用ribbon時的大致架構:

① 首先引入ribbon依賴,ribbon的使用依賴eureka:

org.springframework.cloud

spring-cloud-starter-eureka

org.springframework.cloud

spring-cloud-starter-ribbon

② 如何使用ribbon    

使用resttemplate進行eureka client(包括服務提供者以及服務消費者,在這裡其實是服務消費者使用resttemplate)之間的通訊,為resttemplate配置類新增@loadbalanced註解即可,如下所示: 

@bean

@loadbalanced

public

resttemplate resttemplate()

主程式:

@enableeurekaclient

//在啟動該微服務的時候就能去載入我們的自定義ribbon配置類,從而使配置生效

@ribbonclient(name="microservicecloud-dept")

public

class

public

static

void

main(string args)

}③ 如何解決硬編碼

以前:

@restcontroller

public

class

deptcontroller_consumer

}

使用ribbon後:

@restcontroller

public

class

deptcontroller_consumer

}

微服務(服務提供者)集群搭建:

機器1

server:

port: 8001spring:

name: microservicecloud-dept

datasource:

type: com.alibaba.druid.pool.druiddatasource

driver-class-name: org.gjt.mm.mysql.driver

url: jdbc:mysql:

//localhost:3306/clouddb01

username: root

password: 123456機器2

server:

port: 8002spring:

name: microservicecloud-dept

datasource:

type: com.alibaba.druid.pool.druiddatasource

driver-class-name: org.gjt.mm.mysql.driver

url: jdbc:mysql:

//localhost:3306/clouddb02

username: root

password: 123456機器3

預設的是roundbobinrule(輪詢)

使用:

@configuration

public

class configbean //

@bean

public

irule myrule()

}

自定義負載均衡演算法:

所謂的自定義ribbon client的主要作用就是使用自定義配置替代ribbon預設的負載均衡策略,注意:自定義的ribbon client是有針對性的,一般乙個自定義的ribbon client是對乙個服務提供者(包括服務名相同的一系列副本)而言的。自定義了乙個ribbon client 它所設定的負載均衡策略只對某一特定服務名的服務提供者有效,但不能影響服務消費者與別的服務提供者通訊所使用的策略。根據官方文件的意思,推薦在 springboot 主程式掃瞄的包範圍之外進行自定義配置類。其實純**自定義ribbonclient的話有兩種方式:

方式一:在springboot主程式掃瞄的包外定義配置類,然後為springboot主程式新增 @ribbonclient 註解引入配置類。

配置類不應該在springboot的包路徑下,通過@ribbonclient 註解載入:

@configuration

public

class

myselfrule

}

springboot主程式:

@enableeurekaclient

//在啟動該微服務的時候就能去載入我們的自定義ribbon配置類,從而使配置生效

@ribbonclient(name="microservicecloud-dept",configuration=myselfrule.class

)public

class

}自定義loadbalance:

public

class randomrule_zy extends

abstractloadbalancerrule

server server = null;

while (server == null

) list

uplist = lb.getreachableservers(); //

啟用可用的服務

listalllist = lb.getallservers(); //

所有的服務

int servercount =alllist.size();

if (servercount == 0)

if(total < 5)

else

}

if (server == null)

if(server.isalive())

// server = null

; thread.yield();

}return

server;

}@override

public

server choose(object key)

@override

public

void

initwithniwsconfig(iclientconfig clientconfig)

}

keyframes詳解與例項

文章 keyframes動畫是迴圈的,而transform只執行一遍.css3中新增的新屬性animation是用來為元素實現動畫效果的,但是animation無法單獨擔當起實現動畫的效果。承載動畫的另乙個屬性 keyframes。使用的時候為了相容可加上 webkit o ms moz khtml...

Feign詳解與例項

feign是一種負載均衡的http客戶端,使用feign呼叫api就像呼叫本地方法一樣,從避免了呼叫目標微服務時,需要不斷的解析 封裝json 資料的繁瑣。feign整合了ribbon。ribbon eureka是面向微服務程式設計,而feign是面向介面程式設計。fegin是乙個宣告似的web服務...

Ribbon與Nginx的區別

ribbon是客戶端的負載均衡工具,而客戶端負載均衡和服務端負載均衡最大的區別在於 服務清單所儲存的位置不同,在客戶端負載均衡中,所有客戶端節點下的服務端清單,需要 自己從服務註冊中心上獲取,比如eureka服務註冊中心。同服務端負載均衡的架構類似,在客戶端負載均衡中也需要心跳去維護服務端清單的健康...