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