Spring Cloud Zuul路由规则动态更新解析

所属分类: 软件编程 / java 阅读数: 60
收藏 0 赞 0 分享

这篇文章主要介绍了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

缺点:

扩展复杂,需要定制化开发,并重写路由规则的加载逻辑。

优点:

可以灵活控制路由规则变更,结合业务场景加入更多自定义功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多