SpringCloud微服務實戰——搭建企業級開發框架(十三):OpenFeign+Ribbon實現高可用重試機制
- 2021 年 11 月 3 日
- 筆記
- SpringCloud, 微服務
Spring Cloud OpenFeign 默認是使用Ribbon實現負載均衡和重試機制的,雖然Feign有自己的重試機制,但該功能在Spring Cloud OpenFeign基本用不上,除非有特定的業務需求,則可以實現自己的Retryer,然後在全局注入或者針對特定的客戶端使用特定的Retryer。
在SpringCloud體系項目中,引入的重試機制保證了高可用的同時,也會帶來一些其它的問題,如冪等操作或一些沒必要的重試,下面我們實際操作來測試Spring Cloud架構中的重試機制。
1、因為Ribbon默認是開啟重試機制的,使用上一章節的代碼可以測試重試機制,這裡為了分辨是否執行了重試,我們把gitegg-service-cloud下面配置的Ribbon負載均衡策略改為輪詢。按照上一章節方式啟動三個服務,然後頁面快速點擊測試,發現服務端口一直有規律的切換。然後,快速關閉其中一個gitegg-service-system服務,此時繼續在頁面快速點擊測試,我們發現接口並沒有報錯,而是切換到其中一個服務的端口,這說明重試機制有效。
2、接下來,我們修改配置文件使重試機制失效,就可以看到服務關閉後因沒有重試機制系統報錯的結果。修改GitEgg-Platform工程下子工程gitegg-service-cloud的代碼,添加Ribbon相關配置文件,因為Ribbon默認是開啟重試機制的,這裡選擇關閉
ribbon:
#請求連接的超時時間
ConnectTimeout: 5000
#請求處理/響應的超時時間
ReadTimeout: 5000
#對所有操作請求都進行重試
OkToRetryOnAllOperations: false
#切換實例的重試次數
MaxAutoRetriesNextServer: 0
#當前實例的重試次數
MaxAutoRetries: 0
3、GitEgg-Platform重新install,GitEgg-Cloud項目重新導入依賴,然後重啟三個服務,這時,快速點擊測試接口的時候再關閉其中一個服務,發現接口在訪問服務的時候因為沒有重試機制,導致訪問接口報錯
本文源碼在//gitee.com/wmz1930/GitEgg 的chapter-13分支。