SpringCloud之Zuul服务网关详解

 更新时间:2023年08月29日 10:20:15   作者:疯狂的帆  
这篇文章主要介绍了SpringCloud之Zuul服务网关详解,服务网关是微服务架构中一个不可或缺的部分,通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能,需要的朋友可以参考下

ZUUL服务网关是什么

服务网关是微服务架构中一个不可或缺的部分。

通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能。

Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

ZUUL官网:https://github.com/Netflix/zuul

ZUUL服务架构

在这里插入图片描述

在这里插入图片描述

ZUUL 路由(Router)

ZUUL的简单使用

1)新建一个服务

在这里插入图片描述

2)引入依赖

<!-- zuul依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- 导入eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3)编写启动类

@SpringBootApplication
@EnableEurekaClient // 开启Eureka客户端
@EnableZuulProxy    // 开启服务网关
public class ZuulApp {
    public static void main(String[] args) {
        System.out.println("Zuul网关服务启动。。。8885");
        SpringApplication.run(ZuulApp.class, args);
    }
}

4)配置zuul

server.port=8885
spring.application.name=springcloud-zuul-gateway
# springcloud-consumer:指定路由ID,名字是自定义的
# path:映射的地址
zuul.routes.springcloud-consumer.path=/consumer/**
# url:springcloud-consumer实际的服务地址,写服务名即可
zuul.routes.springcloud-consumer.url=springcloud-consumer
# 让zuul去eureka获取服务
# 获取服务列表的周期
eureka.client.registry-fetch-interval-seconds=5
# eureka的服务地址
eureka.client.service-url.defaultZone=http://eureka-8888:8888/eureka/
# 当调用getHostname获取实例的hostname时,返回ip而不是host名称
eureka.instance.prefer-ip-address=true
# 指定ip地址
eureka.instance.ip-address=127.0.0.1

5)测试

先启动 eureka服务,再启动其他服务

在这里插入图片描述

访问 //localhost:8885/consumer/queryUserList

在这里插入图片描述

可以看出,zuul服务网关已经可以正常运作了。

这便是 ZUUL服务网关中路由(Router)的功能。接下来我们来了解zuul的另一大功能—过滤器(Filter)。

ZUUL 过滤器 Filter

zuulFilter的使用场景

  1. 请求鉴权:一般放在pre类型,如果发现没有访问权限,直接就拦截了
  2. 异常处理:一般会在error类型和post类型过滤器中结合来处理。
  3. 服务调用时长统计:pre和post结合使用。

filter的类型

  • pre:请求在被路由之前执行
  • routing:在路由请求时调用
  • post:在routing和errror过滤器之后调用
  • error:处理请求时发生错误调用

Filter 的生命周期

Filter 的生命周期有 4 个,分别是 “PRE”、“ROUTING”、“POST” 和“ERROR”。

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

在这里插入图片描述

  • 正常流程:
    • 请求到达首先会经过pre类型过滤器,而后到达routing类型,进行路由,请求就到达真正的服务提供者,执行请求,返回结果后,会到达post过滤器。而后返回响应。
  • 异常流程:
    • 整个过程中,pre或者routing过滤器出现异常,都会直接进入error过滤器,再error处理完毕后,会将请求交给POST过滤器,最后返回给用户。
    • 如果是error过滤器自己出现异常,最终也会进入POST过滤器,而后返回。
    • 如果是POST过滤器出现异常,会跳转到error过滤器,但是与pre和routing不同的时,请求不会再到达POST过滤器了。

Zuul中Filter的默认执行顺序

在这里插入图片描述

到此这篇关于SpringCloud之Zuul服务网关详解的文章就介绍到这了,更多相关Zuul服务网关内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot启动security后如何关闭弹出的/login页面

    SpringBoot启动security后如何关闭弹出的/login页面

    这篇文章主要介绍了SpringBoot启动security后如何关闭弹出的login页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • ZooKeeper入门教程二在单机和集群环境下的安装搭建及使用

    ZooKeeper入门教程二在单机和集群环境下的安装搭建及使用

    本文是ZooKeeper入门系列教程,涵盖ZooKeeper的安装使及单机集群环境搭建,通过实例和大量图表,结合实战,帮助学习者理解和运用,有需要的朋友可以借鉴参考下
    2022-01-01
  • java如何根据时间戳生成有序ID

    java如何根据时间戳生成有序ID

    这篇文章主要介绍了java如何根据时间戳生成有序ID问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • JVM中的flag设置详解

    JVM中的flag设置详解

    这篇文章主要介绍了JVM中的flag设置详解,涉及堆大小设置,收集器设置等香公馆内容,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • SpringBoot启动原理深入解析

    SpringBoot启动原理深入解析

    我们开发任何一个Spring Boot项目都会用到启动类,下面这篇文章主要给大家介绍了关于SpringBoot启动原理解析的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Java中的AQS同步队列问题详解

    Java中的AQS同步队列问题详解

    AQS 提供一套基础的机制来实现线程的同步、阻塞与唤醒、等待队列等功能,也就是想要深入学习线程工具类,这个同步队列就必须得掌握,这篇文章主要介绍了Java中的AQS同步队列问题,需要的朋友可以参考下
    2022-06-06
  • java关键字static的使用详解

    java关键字static的使用详解

    这篇文章主要介绍了java关键字static的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • JAVA项目常用异常处理汇总

    JAVA项目常用异常处理汇总

    这篇文章主要介绍了JAVA项目常用异常处理汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解SpringBoot配置文件启动时动态配置参数方法

    详解SpringBoot配置文件启动时动态配置参数方法

    这篇文章主要介绍了详解SpringBoot配置文件启动时动态配置参数方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • springboot多文件上传代码实例及解析

    springboot多文件上传代码实例及解析

    这篇文章主要介绍了springboot多文件上传代码实例及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论