Ribbon基本使用 簡(jiǎn)介 Ribbon是一個(gè)客戶端負(fù)載均衡工具,封裝Netflix Ribbon組件,能夠提供客戶端負(fù)載均衡能力。 理解Ribbon最重要的就是理解客戶端這個(gè)概念,所謂客戶端負(fù)載均衡工具不同于Nginx(服務(wù)端負(fù)載均衡),Ribbon和應(yīng)用程序綁定,本身不是獨(dú)立的服務(wù),也不存儲(chǔ)服務(wù)列表,需要負(fù)載均衡的時(shí)候,會(huì)通過(guò)應(yīng)用程序獲取注冊(cè)服務(wù)列表,然后通過(guò)列表進(jìn)行負(fù)載均衡和調(diào)用。 Nginx獨(dú)立進(jìn)程做負(fù)載均衡,通過(guò)負(fù)載均衡策略,將請(qǐng)求轉(zhuǎn)發(fā)到不同的服務(wù)上 客戶端負(fù)載均衡,通過(guò)在客戶端保存服務(wù)列表信息,然后自己調(diào)用負(fù)載均衡策略,分?jǐn)傉{(diào)用不同的服務(wù) 基本使用 Ribbon的負(fù)載均衡有兩種方式 和 RestTemplate 結(jié)合 Ribbon+RestTemplate 和 OpenFeign 結(jié)合 Ribbon的核心子模塊 ribbon-loadbalancer:可以獨(dú)立使用或者和其他模塊一起使用的負(fù)載均衡API ribbon-core:Ribbon的核心API 訂單服務(wù)集成Ribbon 訂單遠(yuǎn)程桌面服務(wù)調(diào)用商品服務(wù) 配置過(guò)程 分兩步 在訂單服務(wù)中導(dǎo)入ribbon的依賴 <!--ribbon--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency> 配置 RestTemplate 訂單服務(wù)調(diào)用商品服務(wù) 訂單服務(wù)調(diào)用商品服務(wù)的鏈接 不能寫成ip+端口號(hào),需要寫成商品服務(wù)的服務(wù)名稱 參數(shù)調(diào)優(yōu) 主要調(diào)整請(qǐng)求的超時(shí)時(shí)間,是否重試 如果業(yè)務(wù)沒(méi)有做冪等性的話建議把重試關(guān)掉:ribbon.MaxAutoRetriesNextServer=0 # 從注冊(cè)中心刷新servelist的時(shí)間 默認(rèn)30秒,單位msribbon.ServerListRefreshInterval=15000# 請(qǐng)求連接的超時(shí)時(shí)間 默認(rèn)1秒,單位msribbon.ConnectTimeout=30000# 請(qǐng)求處理的超時(shí)時(shí)間 默認(rèn)1秒,單位msribbon.ReadTimeout=30000# 對(duì)所有操作請(qǐng)求都進(jìn)行重試,不配置這個(gè)MaxAutoRetries不起作用 默認(rèn)false#ribbon.OkToRetryOnAllOperations=true# 對(duì)當(dāng)前實(shí)例的重試次數(shù) 默認(rèn)0# ribbon.MaxAutoRetries=1# 切換實(shí)例的重試次數(shù) 默認(rèn)1ribbon.MaxAutoRetriesNextServer=0 如果MaxAutoRetries=1和MaxAutoRetriesNextServer=1請(qǐng)求在1s內(nèi)響應(yīng),超過(guò)1秒先同一個(gè)服務(wù)器上重試1次,如果還是超時(shí)或失敗,向其他服務(wù)上請(qǐng)求重試1次。 那么整個(gè)ribbon請(qǐng)求過(guò)程的超時(shí)時(shí)間為:ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1 |
|