Spring Cloud Zuul路由規(guī)則動態(tài)更新解析
這篇文章主要介紹了Spring Cloud Zuul路由規(guī)則動態(tài)更新解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
背景
Spring Cloud Zuul 作為微服務的網(wǎng)關,請求經(jīng)過zuul路由到內(nèi)部的各個service,由于存在著新增/修改/刪除服務的路由規(guī)則的需求,zuul的路由規(guī)則的動態(tài)變更功能 提供了
無須重啟zuul網(wǎng)關,即可實時更新,現(xiàn)有如下幾種方式:
一、基于refresh + config-server事件動態(tài)刷新
(1)spring boot 集成了spring actuator 提供的 refresh功能后,在congfig-server的git配置倉庫中新增一個zuul的路由規(guī)則,
(2)post方式刷新refresh端點http://127.0.0.1:8080/refresh(以本機為例)
(3) 再次訪問zuul發(fā)現(xiàn)路由規(guī)則中存在新增的規(guī)則
從觸發(fā)refresh操作開始 -> ZuulPropeties中route更新 整個流程如下:

Zuul網(wǎng)關的路由規(guī)則加載核心類 DiscoveryClientRouteLocator 和 SimpleRouteLocator,詳細可參考 Spring Cloud Zuul源碼。這里不做分析。
路由規(guī)則的加載機制主要是通過SimpleRouteLocator來加載ZuulPropetties中的路由規(guī)則。上圖說明了整個從refresh到屬性注入ZuulProperties的整個流程
缺點:
由于refresh后 首先加載的配置中心的全部zuul的最新K/V數(shù)據(jù),然后根據(jù)加載的屬性K/V注入規(guī)則到ZuulPropeties( Bean)中,而ZuulPropeties在refresh之前就存在Bean容器中,
所以新增或者修改Zuul路由規(guī)則,refresh后會新增或者覆蓋ZuulPropeties中的屬性值,而刪除操作ZuulPropeties中的路由規(guī)則依舊存在,所以刪除無效
優(yōu)點:
使用簡單,基于配置倉庫對路由規(guī)則進行版本管理,只需向外暴露refresh端點即可。
二、基于RefreshScope的動態(tài)刷新
擴展ZuulPropeties并使用RefreshScope注解,修改配置中心的路由規(guī)則后,觸發(fā)refresh操作路由規(guī)則即會發(fā)生變更,
代碼:
@Bean
@ConfigurationProperties("zuul")
@RefreshScope
@Primary
public ZuulProperties zuulProperties() {
return new ZuulProperties();
}
缺點:
需要自定義擴展ZuulPropetties,加入RefreshScope注解
優(yōu)點:
由于RefreshScope使用cglib產(chǎn)生ZuulPropetties的代理,和一中Bean對象實現(xiàn)方式不同,所以針對路由規(guī)則刪除也可以生效
三、基于db存儲的動態(tài)刷新
Zuul網(wǎng)關的路由規(guī)則加載核心類 DiscoveryClientRouteLocator 和 SimpleRouteLocator,可
以擴展SimpleRouteLocator重載其中的locateRoutes()方法,實現(xiàn)自定義從db中加載路由規(guī)則,觸發(fā)條件仍然是refresh
缺點:
擴展復雜,需要定制化開發(fā),并重寫路由規(guī)則的加載邏輯。
優(yōu)點:
可以靈活控制路由規(guī)則變更,結合業(yè)務場景加入更多自定義功能
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Java將日期類型Date時間戳轉(zhuǎn)換為MongoDB的時間類型數(shù)據(jù)
今天小編就為大家分享一篇關于Java將日期類型Date時間戳轉(zhuǎn)換為MongoDB的時間類型數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10
IDEA 開發(fā)配置SparkSQL及簡單使用案例代碼
這篇文章主要介紹了IDEA 開發(fā)配置SparkSQL及簡單使用案例代碼,本文通過代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Spring中利用SchedulingConfigurer實現(xiàn)動態(tài)定時任務配置的示例
定時任務是一項至關重要的功能,它們使得我們能夠按照預定的時間執(zhí)行特定的任務,本文主要介紹了Spring中利用SchedulingConfigurer實現(xiàn)動態(tài)定時任務配置的示例,感興趣的可以了解一下2024-05-05
IDEA?+?Maven環(huán)境下的SSM框架整合及搭建過程
這篇文章主要介紹了IDEA?+?Maven環(huán)境下的SSM框架整合及搭建過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流
這篇文章主要介紹了SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
SpringBoot2.X Devtools熱部署實現(xiàn)解析
這篇文章主要介紹了SpringBoot2.X Devtools熱部署實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08

