关于zuul如何实现动态路由,已经有大神写博客详解过,这里不啰嗦了,文章地址:Spring Cloud Zuul实现动态路由,咱们就从这篇文章最后的一个问题讲起,作者在最后实现动态刷新路由规则时说:为什么不自己是手动重新加载Locator.dorefresh?非要用事件去刷新?这牵扯到内部的zuul内部组件的工作流程,不仅仅是Locator本身的一个变量,具体想要了解的还得去看源码。下面我们就来分析下zuul的源码看看为什么要这样做?
要讲清楚zuul的事件驱动模型,还得知道spring的事件驱动模型,因为zuul的实现正是利用了spring的事件驱动模型实现的。下面看看spring提供的事件模型图:
在zuul中有这样一个实现了ApplicationListener的监听器ZuulRefreshListener ,代码如下:
private static class ZuulRefreshListener implements ApplicationListener<ApplicationEvent> {
@Autowired
private ZuulHandlerMapping zuulHandlerMapping;
private HeartbeatMonitor heartbeatMonitor = new HeartbeatMonitor();
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextRefreshedEvent
|| event instanceof RefreshScopeRefreshedEvent
|| event instanceof RoutesRefreshedEvent) {
this.zuulHandlerMapping.setDirty(true);
}
else if (event instanceof HeartbeatEvent) {
if (this.heartbeatMonitor.update(((HeartbeatEvent) event).getValue())) {
this.zuulHandlerMapping.setDirty(true);
}
}
}
}
由此可知在发生ContextRefreshedEvent和RoutesRefreshedEvent事件时会执行this.zuulHandlerMapping.setDirty(true);
public void setDirty(boolean dirty) {
this.dirty = dirty;
if (this.routeLocator instanceof RefreshableRouteLocator) {
((RefreshableRouteLocator) this.routeLocator).refresh();
}
}
这样在spring容器启动完成后就刷新了路由规则。因此我们如果要主动刷新路由规则,只需要发布一个RoutesRefreshedEvent事件即可,代码如下
public void refreshRoute() {
RoutesRefreshedEvent routesRefreshedEvent = new RoutesRefreshedEvent(routeLocator);
this.publisher.publishEvent(routesRefreshedEvent);
logger.info("刷新了路由规则......");
}
http://blog.csdn.net/bigkylin/article/details/72626506
相关推荐
基于Spring Cloud Zuul的动态路由实现demo,实现动态配置,实时刷新
主要介绍了SpringCloud Zuul实现动态路由,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
zuul 企业级应用
Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等...下面这篇文章主要给大家介绍了关于利用Spring Cloud Zuul实现动态路由的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
NULL 博文链接:https://baobeituping.iteye.com/blog/2427390
祖尔 Zuul是一种边缘服务,提供动态路由,监视,弹性,安全性等 ...1,zuul使用场景,主要实现技术栈,系统架构整体概述(含系统架构图) 2,动态路由,静态路由,鉴权,限流等实战..... 3,从0到1实现一个网关
网关服务是流量的唯一入口。不能随便停服务。所以动态路由就显得尤为必要。这篇文章主要介绍了Spring Cloud 网关服务 zuul 三 动态路由的相关知识,需要的朋友可以参考下
springcloud zuul 网关开发实践,模拟了在Spring Cloud微服务系统中,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服的实现过程。
maven多模块服务,spring boot2.0+spring cloud的eureka服务注册发现+zuul的简单路由及过滤;4个服务都启动后, 访问这个地址,可以看到简单路由的效果:http://localhost:3333/api-a/info
主要介绍了springcloud Zuul动态路由的实现,详细的介绍了什么是Zuu及其动态路由的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
API文档管家 - 基于Swagger与Zuul的API文档管家设计源码 - 包含21个文件,如.java、.xml、.properties、.png等。该系统通过Swagger和Zuul实现,为用户提供了一个强大的API文档管理工具,帮助开发者更好地管理和维护...
主要介绍了Spring Cloud Zuul路由规则动态更新解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring-cloud-zuul(包含注册中心、服务生产者、服务消费者、zuul网关路由).zip 暂时只有zuul反向代理
【微服务架构】SpringCloud之路由网关(zuul)https://blog.csdn.net/u012081441/article/details/80771468
3. 运行com.ctrip.framework.apollo.use.cases.spring.cloud.zuul.Application启动 Demo 5
spring cloud框架下的单点登录sso技术 oauth2实现的认证 授权 以及zuul作为网关路由 可以参考学习使用
SpringCloud之六 路由网关zuul,使用Zuul来进行网关路由,以及安全验证的处理
SpringCloud(zuul路由网关)
演示了如何在一个Spring Cloud架构中使用zuul网关,实现动态路由,详细解释了zuul的各种配置
SpringBoot + Zuul + ribbon 中实现负载均衡