`
m635674608
  • 浏览: 5041967 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

zuul实现动态路由以及相关源码解析

 
阅读更多

关于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

 

分享到:
评论

相关推荐

    zuul-2.1.5:zuul原始码解析-源码解析

    祖尔 Zuul是一种边缘服务,提供动态路由,监视,弹性,安全性等 ...1,zuul使用场景,主要实现技术栈,系统架构整体概述(含系统架构图) 2,动态路由,静态路由,鉴权,限流等实战..... 3,从0到1实现一个网关

    zuul-2.1.3.zip

    五、源码解析 在解压的"zuul-2.1.3"文件中,我们可以找到Zuul的源代码,通过阅读`com.netflix.zuul`包下的类,可以深入了解其架构设计和实现细节,如`FilterProcessor`(过滤器处理)和`ZuulRunner`(请求处理流程...

    spring cloud zuul 使用

    以上是对Spring Cloud Zuul的详细解析,涵盖了其基本概念、核心功能、配置、过滤器机制以及实际应用中的注意事项。通过理解和掌握这些知识点,可以有效地在微服务架构中部署和使用Zuul来提升系统的效率和稳定性。

    浅谈SpringCloud之zuul源码解析

    在SpringCloud生态系统中, Zuul是一个...通过源码解析,我们可以更深入地理解Zuul的工作机制,从而更好地定制和优化我们的微服务架构。在实际开发中,了解这些细节可以帮助我们解决性能瓶颈,提升系统的稳定性和效率。

    资源前后端分离式分布式微服务架构项目用户认证Zuul讲义+源码+视频

    本文档详细介绍了基于资源前后端分离式分布式微服务架构项目中的用户认证及Zuul网关的相关知识点,涵盖了用户登录、前端显示当前用户、用户退出等功能的开发过程,以及Zuul网关的创建、配置、路由规则设置等内容。...

    SpringCloud源码-01.zip

    本篇将围绕SpringCloud的核心组件进行源码分析,包括Eureka服务注册与发现、Ribbon客户端负载均衡、Hystrix断路器、Zuul路由网关以及Config分布式配置中心,旨在帮助读者深入理解这些组件的工作原理。 一、Eureka:...

    spring cloud 配置源码.zip

    《Spring Cloud配置源码解析与实战》 Spring Cloud作为微服务架构的重要组件,为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话...

    基于spring cloud项目源码源码.rar

    4. Zuul或Spring Cloud Gateway源码:了解它们如何处理请求转发,实现API路由和过滤器,以及安全策略的集成。 四、实战应用 1. 分析配置中心Config Server和Client的交互过程,理解如何实现配置的实时更新。 2. ...

    spring-cloud实战源码

    通过源码,我们可以知道它们如何根据配置动态调整路由,以及如何实现自定义过滤器。 3. **Ribbon与Feign源码探究**:这两个组件是服务消费者的重要部分。Ribbon是客户端负载均衡器,Feign是基于Ribbon的声明式HTTP...

    基于springcloud的电商平台源码.zip

    《基于SpringCloud的电商平台源码解析》 在现代互联网应用开发中,微服务架构已经成为主流。Spring Cloud作为一套完整的微服务解决方案,为开发者提供了构建分布式系统所需的工具集合,包括服务发现、配置中心、...

    从零开始搭建SpringCloud第七节源码

    源码解析可以帮助我们理解Zuul如何处理请求,以及过滤器链的执行流程。 3. **断路器** - Hystrix是Netflix开源的断路器库,用于防止服务雪崩。当服务调用失败或响应时间过长时,断路器会打开,避免后续请求继续失败...

    routd-1.0.0.zip

    Zuul不仅提供路由转发功能,还能进行负载均衡、动态路由、熔断、监控等功能,极大地增强了微服务的灵活性和可扩展性。而"zuul-spring-client"正是基于Zuul的Spring客户端集成库,旨在简化Zuul与Spring应用的集成过程...

    spring-cloud-source-analysis-code:SpringCloudNetflix二进制解读与原理分析小册测试代码-源码解析

    - Zuul的源码解析将揭示其如何处理请求、执行过滤器链以及如何实现动态路由。 - Hystrix的测试代码则展示了熔断和降级策略的实现,以及线程池和信号量隔离的运用。 - Ribbon和Feign的源码分析有助于理解客户端如何...

    尚硅谷SpringCloud的源码及思维导图

    Zuul和Feign则关注于客户端的路由规则定义,通过动态生成的代理类来实现接口调用,源码中可学习到如何自定义过滤器以及如何与服务实例通信。 SpringCloud还引入了Spring Cloud Config来实现配置中心,它支持配置的...

    从零开始搭建SpringCloud第六节源码及截图修正版

    在本教程中,我们将深入探讨如何从零开始搭建Spring Cloud框架,主要关注第六节的内容,包括源码解析和截图辅助理解。Spring Cloud是一款基于Spring Boot实现的云应用开发工具集,它为开发者提供了在分布式系统(如...

    基于SpringCloud分布式微服务+微信小程序实现短视频社交app设计源码.zip

    我们将围绕核心的技术组件,如Eureka、Zuul、Hystrix、Config Server以及微信小程序API,进行详尽的解析。 首先,SpringCloud是微服务开发的主流框架,它提供了包括服务注册与发现、熔断机制、配置中心等一整套解决...

    springcloud 源码+解读

    1. **SpringCloud源码解析**: SpringCloud的源码分析有助于开发者了解其实现机制,从而更好地定制和优化自己的服务。源码中包含了Eureka服务发现、Zuul边缘服务、Hystrix断路器、 Ribbon客户端负载均衡、Feign声明...

    SpringCloud源码深度解析

    SpringCloud是目前广泛应用的微服务框架,其源码解析对于开发者深入理解微服务架构和优化实践至关重要。在SpringCloud中,Eureka作为注册中心,它的功能和工作机制是整个微服务架构的关键。 Eureka的主要职责是管理...

    cloud2020.zip--周阳老师源码

    此外,Spring Cloud Alibaba的Nacos在该项目中可能作为配置中心和服务中心,提供服务的注册、发现以及动态配置等功能。Sentinel可能被用来实现服务的流量控制和降级策略,以保证系统的稳定性和可用性。 通过对...

    zuul-spring-cloud-gateway

    Zuul是Netflix开源的边缘服务框架,作为微服务架构的一部分,它主要负责路由转发、动态过滤以及负载均衡等功能。Zuul的核心特性包括: 1. **路由**:允许我们将请求路由到不同的微服务。 2. **过滤器**:提供了对...

Global site tag (gtag.js) - Google Analytics