美文网首页
SpringCloud学习(五)之Zuul

SpringCloud学习(五)之Zuul

作者: Gukson666 | 来源:发表于2019-11-30 22:52 被阅读0次

    Zuul简介

    Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

    1. 引入依赖
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
    
    1. 启动类加上注解@EnableZuulProxy:
    @SpringBootApplication
    @EnableZuulProxy
    @EnableEurekaClient
    @EnableDiscoveryClient
    public class ServiceZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run( ServiceZuulApplication.class, args );
        }
    }
    
    
    1. application.yml配置文件
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    server:
      port: 8769
    spring:
      application:
        name: service-zuul
    zuul:
      routes:
        api-a:
          path: /api-a/**
          serviceId: service-ribbon
        api-b:
          path: /api-b/**
          serviceId: service-feign
    

    首先指定服务注册中心的地址为http://localhost:8761/eureka/,服务的端口为8769,服务名为service-zuul;以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务。依次运行这五个工程:

    • 访问http://localhost:8769/api-a/将会调用service-ribbon服务
    • 访问http://localhost:8769/api-b/将会调用service-feign服务
      可见zuul起到了路由的作用。

    Zuul的核心

    Filter是Zuul的核心,用来实现对外服务的控制。Filter的生命周期有4个,分别是“PRE”、“ROUTING”、“POST”、“ERROR”,整个生命周期可以用下图来表示:



    Zuul大部分功能都是通过过滤器来实现的,这些过滤器类型对应于请求的典型生命周期。

    • filterType

      • pre: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
      • routing:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
      • post:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
      • error:在其他阶段发生错误时执行该过滤器。 除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。例如,我们可以定制一种STATIC类型的过滤器,直接在Zuul中生成响应,而不将请求转发到后端的微服务。
    • filterOrder:过滤的顺序

    • shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。

    • run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。

    若禁用指定的Filter可以在application.yml中配置需要禁用的filter:

    zuul:
        FormBodyWrapperFilter:
            pre:
                disable: true
    

    除了zuul自身定义的Filter外,其实也可以进行自定义Filter,有兴趣的可以自行深入了解。

    Zuul高可用

    实际在使用Zuul的方式如上图,不同的客户端使用不同的负载将请求分发到后端的Zuul,Zuul在通过Eureka调用后端服务,最后对外输出。因此为了保证Zuul的高可用性,前端可以同时启动多个Zuul实例进行负载,在Zuul的前端使用Nginx等进行负载转发以达到高可用性。

    相关文章

      网友评论

          本文标题:SpringCloud学习(五)之Zuul

          本文链接:https://www.haomeiwen.com/subject/llumwctx.html