SpringCloud H版&alibaba之Gateway

本文详细介绍了SpringCloud Gateway,它是SpringCloud 2.x版本中的新一代服务网关,取代了Zuul。Gateway基于WebFlux框架,提供高性能、动态路由、过滤器等功能。文中讲解了Gateway的工作流程,包括路由、断言和过滤器的概念,并通过实例展示了入门配置、动态路由配置。此外,还探讨了常用的Predicate和过滤器,如After、Before、Path等,以及如何自定义过滤器。
摘要由CSDN通过智能技术生成

SpringCloud(H版&alibaba)之Gateway篇

服务网关

Gateway和Zuul说明:

Zuul由于内部出现重大分歧,已经没落,新一代的服务网关是Gateway,只学这个

Gateway 并非netflix开发的,而是spring 社区自己开发的。

Gateway是什么

官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

面试可能会问,是什么,为什么选这个

是什么?

Cloud全家桶中有个很重要的组件就是网关,在1.x版本中采用zuul;

2.x版本中,SpringCloud自己研发了一个网关代替Zuul,那就是Gateway.

Gateway: 旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。

为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty.

提供 安全,监控/指标,限流。

为什么选择Gateway

一、基于异步非阻塞模型上进行开发的,性能方面不需要担心;稳定,Zuul 2 进入了维护期。

二、特性

​ 动态路由:能够匹配任何请求属性

​ 可以对路由指定 Predicate (断言) 和 Filter (过滤器);

​ 集成Hystrix 的断路器功能;

​ 集成 Spring Cloud 服务发现功能;

​ 易于编写的 Predicate (断言) 和 Filter (过滤器);

​ 请求限流功能;

​ 支持路径重写;

三、spring cloud gateway 还支持WebSocket,并且与Spring紧密集成拥有更好的开发体验,Zuul阻塞模型,性能要慢,gateway非阻塞模型,是Zuul速度的1.6倍

Gateway工作流程

三大核心概念

Route(路由) :路由是构建网关的基本模块,它由ID,目标URI, 一系列的断言和过滤器组成,如果断言为true,则匹配该路由

Predicate(断言) :参考的是Java8的java.util.function.Predicate,开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

Filter(过滤) :指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或之后进行修改。

总体:web请求,通过一些匹配条件,定位到真正的服务节点。并且在这个转发过程的前后,进行一些精细化控制。 predicate就是我们的匹配条件;而filter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri, 就可以实现一个具体的路由了。

额外的知识:一个请求的流程:

外部请求 ——> 负载均衡——> 网关 ——> 微服务

官网总结流程

​ 客户端向Spring Cloud Gateway发出请求。然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway Web Handler。

Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行 业务逻辑,然返回。

过滤器可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑。

Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,

在 “post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

核心逻辑

路由转发 + 执行过滤器链

入门配置

新建Module : cloud-gateway-gateway9527

POM

<dependencies>
        <!--Gateway依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--需要注册进eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>com.huawei.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </d
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值