Zuul网关之快速上手

API网关
01 Spring Cloud Gateway网关之快速上手
02 Spring Cloud Gateway网关之两种路由配置方式
03 Spring Cloud Gateway网关之跨域支持
04 Spring Cloud Gateway网关之自定义全局过滤器
05 Spring Cloud Gateway网关之自定义路由过滤器
06 Spring Cloud Gateway网关之自定义路由谓词工厂
07 Spring Cloud Gateway网关之超时时间配置
08 Spring Cloud Gateway网关之配置说明
09 Zuul网关之快速上手
10 Zuul网关之路由配置
11 Zuul网关之跨域支持
12 Zuul网关之自定义过滤器
13 Zuul网关之超时时间配置

一 什么是Zuul

Zuul是Netflix提供的基于JVM的路由器和服务器端负载平衡器。

特别注意:spring cloud集成的zuul网关还是1.x版本的,是阻塞IO模型,Spring cloud也也没有计划会集成zuul2.x版本(非阻塞IO)的网关,意味着spring cloud集成的zuul网关会长期处于维护模式,所以新项目在选择网关的时候,要非常注意这点。

Netflix包含以下模块,都已经被Spring标位维护模式:

  • spring-cloud-netflix-archaius

  • spring-cloud-netflix-concurrency-limits

  • spring-cloud-netflix-hystrix-contract

  • spring-cloud-netflix-hystrix-dashboard

  • spring-cloud-netflix-hystrix-stream

  • spring-cloud-netflix-hystrix

  • spring-cloud-netflix-ribbon

  • spring-cloud-netflix-turbine-stream

  • spring-cloud-netflix-turbine

  • spring-cloud-netflix-zuul

Spring官方给出的Zuul的用途:

  • Authentication(认证)
  • Insights
  • Stress Testing(压测)
  • Canary Testing(金丝雀测试)
  • Dynamic Routing(动态路由)
  • Service Migration(服务迁移)
  • Load Shedding(减载)
  • Security(安全)
  • Static Response handling(静态响应处理)
  • Active/Active traffic management(流量管理)

Zuul的规则引擎使规则和过滤器基本上可以用任何JVM语言编写,并内置对Java和Groovy的支持。

二 快速上手Zuul网关

http://start.spring.io 生成项目框架

image-20200821122956930

同时生成一个业务服务如下:

image-20200813015746140

三 修改生成的项目

针对zuul-demo项目

  • 修改SpringBoot启动类,增加注解@EnableZuulProxy

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package com.qicoder.gateway.zuul.zuuldemo;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.zuul.EnableZuulServer;

    @EnableZuulProxy
    @SpringBootApplication
    public class ZuulDemoApplication {

    public static void main(String[] args) {
    SpringApplication.run(ZuulDemoApplication.class, args);
    }

    }
  • 删除resources下的application.properties,创建application.yaml,并粘贴以下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    server:
    port: 8888

    spring:
    application:
    name: zuul-demo

    zuul:
    ignored-services: "*" # 去掉服务发现的服务,避免暴露出去
    routes:
    business-api:
    path: /business/** # 路由路径
    customSensitiveHeaders: true # 是否去除敏感头 true为去除
    sensitiveHeaders: Cookie,Set-Cookie # 需要去除的敏感头 去除了 即不会往下游转发
    url: http://localhost:9999/api # 需要转发的url

针对demo-business项目

  • application.properties增加配置

    1
    server.port=9999
  • 在包com.qicoder.business下增加controller包,并在该controller包下创建一个controller如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.qicoder.business.controller;

    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    /**
    * business demo
    */
    @RestController
    @RequestMapping("/api")
    public class MyBusinessController {

    @GetMapping("/test1")
    public String testApi() {
    return "test 11111";
    }

    @GetMapping("/test2")
    public String testApi2() {
    return "test 2222";
    }

    }

四 验证

  • 分别启动两个服务的application

  • 在浏览器浏览业务服务接口地址,看返回情况如下:

    image-20200813021033669image-20200813021135794

  • 通过上面两个图片情况可知,网关转发生效了,至此,恭喜你,你的最基础的一个网关服务已经完成了。