时间:2021-05-20
这篇文章主要介绍了Spring Cloud Zuul路由规则动态更新解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
背景
Spring Cloud Zuul 作为微服务的网关,请求经过zuul路由到内部的各个service,由于存在着新增/修改/删除服务的路由规则的需求,zuul的路由规则的动态变更功能 提供了
无须重启zuul网关,即可实时更新,现有如下几种方式:
一、基于refresh + config-server事件动态刷新
(1)spring boot 集成了spring actuator 提供的 refresh功能后,在congfig-server的git配置仓库中新增一个zuul的路由规则,
(2)post方式刷新refresh端点http://127.0.0.1:8080/refresh(以本机为例)
(3) 再次访问zuul发现路由规则中存在新增的规则
从触发refresh操作开始 -> ZuulPropeties中route更新 整个流程如下:
Zuul网关的路由规则加载核心类 DiscoveryClientRouteLocator 和 SimpleRouteLocator,详细可参考 Spring Cloud Zuul源码。这里不做分析。
路由规则的加载机制主要是通过SimpleRouteLocator来加载ZuulPropetties中的路由规则。上图说明了整个从refresh到属性注入ZuulProperties的整个流程
缺点:
由于refresh后 首先加载的配置中心的全部zuul的最新K/V数据,然后根据加载的属性K/V注入规则到ZuulPropeties( Bean)中,而ZuulPropeties在refresh之前就存在Bean容器中,
所以新增或者修改Zuul路由规则,refresh后会新增或者覆盖ZuulPropeties中的属性值,而删除操作ZuulPropeties中的路由规则依旧存在,所以删除无效
优点:
使用简单,基于配置仓库对路由规则进行版本管理,只需向外暴露refresh端点即可。
二、基于RefreshScope的动态刷新
扩展ZuulPropeties并使用RefreshScope注解,修改配置中心的路由规则后,触发refresh操作路由规则即会发生变更,
代码:
缺点:
需要自定义扩展ZuulPropetties,加入RefreshScope注解
优点:
由于RefreshScope使用cglib产生ZuulPropetties的代理,和一中Bean对象实现方式不同,所以针对路由规则删除也可以生效
三、基于db存储的动态刷新
Zuul网关的路由规则加载核心类 DiscoveryClientRouteLocator 和 SimpleRouteLocator,可
以扩展SimpleRouteLocator重载其中的locateRoutes()方法,实现自定义从db中加载路由规则,触发条件仍然是refresh
缺点:
扩展复杂,需要定制化开发,并重写路由规则的加载逻辑。
优点:
可以灵活控制路由规则变更,结合业务场景加入更多自定义功能
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
先简单说一下我们工程的架构:前端工程是采用react,后端工程采用spring-cloud,里面分为zuul工程和其他功能模块。zuul工程除了提供后端的路由转
zuul各版本实现存在一些微小的变化,总的实现思想未改变,以spring-cloud-netflix-core-1.3.6.RELEASE为例一、zuul的重要
1.官方文档https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.2.2.R
构建Zuul自定义过滤器,限制ip频繁请求自定义zuul过滤器其实很简单1.首先pom文件得先引入zuul依赖org.springframework.cloud
动态路由背景​无论你在使用Zuul还是SpringCloudGateway的时候,官方文档提供的方案总是基于配置文件配置的方式例如:#zuul的配置