欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-06-14 09:46:05|栏目:JAVA代码|点击:

这篇文章主要介绍了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元注解@Inherited的使用详解

栏    目:JAVA代码

下一篇:基于StringBuilder类中的重要方法(介绍)

本文标题:Spring Cloud Zuul路由规则动态更新解析

本文地址:http://www.codeinn.net/misctech/141717.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有