这篇文章主要介绍了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操作路由规则即会发生变更,
代码:
@Bean @ConfigurationProperties("zuul") @RefreshScope @Primary public ZuulProperties zuulProperties() { return new ZuulProperties(); }
缺点:
需要自定义扩展ZuulPropetties,加入RefreshScope注解
优点:
由于RefreshScope使用cglib产生ZuulPropetties的代理,和一中Bean对象实现方式不同,所以针对路由规则删除也可以生效
三、基于db存储的动态刷新
Zuul网关的路由规则加载核心类 DiscoveryClientRouteLocator 和 SimpleRouteLocator,可
以扩展SimpleRouteLocator重载其中的locateRoutes()方法,实现自定义从db中加载路由规则,触发条件仍然是refresh
缺点:
扩展复杂,需要定制化开发,并重写路由规则的加载逻辑。
优点:
可以灵活控制路由规则变更,结合业务场景加入更多自定义功能
感谢你能够认真阅读完这篇文章,希望小编分享的“Spring Cloud Zuul路由规则动态更新的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。