SpringCloud总结:Zuul

zuul是spring cloud提供的一个通用api网关组件,主要提供了服务理由、过滤器和负载均衡等功能,同时它也提供了比hystrix fallback factory粒度更粗的服务降级机制,下面就具体来看一下zuul的使用和原理。

使用zuul其实很简单,只需要一个@EnableZuulProxy注解和一个application.yml配置文件就足够了,就行下面这样
在这里插入图片描述
对于zuul filter的使用其实也很简单,生命一个实现了ZuulFilter的类,然后将其注册到spring 容器中就可了
在这里插入图片描述
另外,由于zuul处于调用链的最前端,所以一般也会做限流方面的工作,说到限流,主流的方案一般有两种,一种是漏桶算法,一种是令牌桶算法,漏桶算法能够保证任何时候进入系统内部的请求的速率是一致的,但是无法处理过多的瞬时请求,而令牌桶算法是以固定的速率生成令牌,直到到达上限,漏桶算法能够响应瞬时的大流量,知道令牌被消耗完,具体使用哪种策略还要看具体的场景,另外有一个基于zuul实现的限流工具包 zuul-ratelimit,可以实现多维限流。

下面来看一下zuul的实现原理,zuul本质是就是一个HttpServlet,下面从代码的角度来看一下。

按照惯例,先来看一下@EnableZuulProxy这个注解
在这里插入图片描述
在这里插入图片描述
到这里可以看到又是一个Marker,也就是spring cloud style,按照惯例,再去找spring.factories
在这里插入图片描述
由于ZuulProxyAutoConfiguration继承 了ZuulServerAutoConfiguration,所以我们直接看ZuulProxyAutoConfiguration就好了
在这里插入图片描述
可以看到熟悉的Marker Condition,在父类中初始化了一个Servlet
在这里插入图片描述
进一步的我们可以再看看这个Servlet的实现
在这里插入图片描述
这三个代码块分别就对应的ZuulFilter的三个生命周期方法,为了验证猜想,可以到preRoute()这个方法中看一看,深入到最后,我们会看到这样一个方法
在这里插入图片描述
到此,ZuulFilter的原理也就搞清楚了,实际上就是HttpServlet的service方法的一个判断分支。

Zuul的另外一个主要功能是服务的路由,服务路由其实是由一个内置的Filter完成的,我们来看一下源码实现,其实也很简单
在这里插入图片描述
看到上面两个红框的位置,相信大家都已经清楚了,首先从根据请求的url从我们制定的配置中找到的服务名称,然后将ip和端口替换成服务名称,但这里只是名称上的替换,并没有继续真正的路由转发,这一步其实是由另外一个Filter完成的RibbonRoutingFilter,来看一下源码实现
在这里插入图片描述
也就是说,zuul的请求路由功能是依赖于ribbon完成的,这一点我们从zuul的pom依赖中也能够看到
在这里插入图片描述
这样就与eureka注册中心联系起来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值