CodeAshen's blog CodeAshen's blog
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)

CodeAshen

后端界的小学生
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)
  • 剖析Spring5核心原理

  • Spring源码轻松学

  • Spring Boot 2.0深度实践

  • Spring-Cloud

    • 第01章-注册中心Eureka
    • 第02章-负载均衡器Ribbon
    • 第03章-熔断器Hystrix
    • 第04章-HTTP客户端Feign
    • 第05章-Zuul网关
      • Zuul介绍
        • 网关介绍
        • Zuul简介
        • Zuul依赖
      • Zuul使用
        • Zuul路由介绍
        • Zuul请求路由表达式
      • Zuul原理
        • Zuul架构图
        • Zuul中request的生命周期
        • 参考文档
      • Zuul进阶
        • 自定义Filter
        • Zuul自带的核心Filter
        • PreFilter
        • RoutingFilter
        • PostFilter
      • Zuul和Zuul2
      • Zuul整合Hystrix
      • Cookie和头信息处理
    • 第06章-微服务安全
  • Spring-Cloud-Alibaba

  • Spring
  • Spring-Cloud
CodeAshen
2023-02-10
目录

第05章-Zuul网关

# Zuul介绍

# 网关介绍

  • 由于微服务“各自为政”的特性,使得微服务使用非常麻烦
  • 通常我们会雇用一个“传达室大爷”作为统一入口,这就是网关
  • 网关主要实现请求转发和请求过滤

image-20201203155226753

# Zuul简介

  • Zuul是网关大军中的一员,目前市场使用率比较高
  • Zuul除了实现请求转发和过滤,一般还作为鉴权和容错使用
  • Zuul可以无缝衔接Ribbon和Hystrix

# Zuul依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# Zuul使用

# Zuul路由介绍

  • Zuul可以通过配置完成请求路由配置
  • Zuul服务路由默认支持serviceId作为上下文
  • ignore-services可以禁用serviceId
zuul:
  prefix: "/webapi/"             # 统一前缀
  routes:                        # 路由规则
    ccfilm-user:
      path: /user-api/**         # 路径匹配规则
      serviceId: user-service    # 服务名称, 可以通过path访问,也可以通过serviceId访问
      retryable: true            # 是否重试
1
2
3
4
5
6
7

# Zuul请求路由表达式

表达式 含义
? 匹配任意单个字符
* 匹配任意数量字符
** 匹配任意数量字符,支持多级目录

# Zuul原理

# Zuul架构图

Zuul架构图

# Zuul中request的生命周期

Zuul生命周期

# 参考文档

  • Zuul网关架构剖析 (opens new window)
  • Zuul源码解析 (opens new window)

# Zuul进阶

# 自定义Filter

  • 继承ZuulFilter并实现相应的方法
  • 设置Filter类型、级别和是否启用
    • 类型:前中后(pre、routing、post)
    • 级别:执行顺序
  • 开发具体业务逻辑

# Zuul自带的核心Filter

# PreFilter

image-20201203173648554

# RoutingFilter

image-20201203174012808

# PostFilter

image-20201203174129451

# Zuul和Zuul2

  • Zuul使用的是阻塞式线程完成业务调用
  • Zuul2使用的是异步线程完成业务调用

Zuul阻塞调用示意图

image-20201203174536219

Zuul2异步调用示意图

image-20201203174609060

# Zuul整合Hystrix

  • Zuul可以使用FallbackProvider完成降级开发
  • Zuul默认是使用HystrixCommand进行包装的
  • Zuul默认情况下隔离使用的Semaphore

# Cookie和头信息处理

  • Zuul帮助我们过滤了一些非安全信息
  • 诸如cookie、set-cookie和authorization等
  • 可以通过设置sensitiveHeaders来修改
# 名叫secret的header头会被过滤
zuul.sensitive-headers=secret
1
2
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19
第04章-HTTP客户端Feign
第06章-微服务安全

← 第04章-HTTP客户端Feign 第06章-微服务安全→

最近更新
01
第01章-RabbitMQ导学
02-10
02
第02章-入门RabbitMQ核心概念
02-10
03
第03章-RabbitMQ高级特性
02-10
更多文章>
Theme by Vdoing | Copyright © 2020-2023 CodeAshen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式