• Spring Cloud Gateway微服务网关快速入门


    介绍

    Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控,和限流等。
    在这里插入图片描述

    • 网关的配置可以和nacos集成实现动态路由配置,具体可以看我的另一篇文章:
      【Spring Cloud Gateway集成Nacos实现动态路由】
      在这里插入图片描述

    工作原理

    下图从总体上概述了Spring Cloud Gateway的工作方式:
    在这里插入图片描述
    客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑。

    核心术语

    • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
    • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
    • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。

    牛刀小试

    下面以一个简单的例子展示Gateway的用法。完整代码看文章最后。

    1. 创建网关服务microservice-gateway

    • 注意:Spring Cloud Gateway 不使用 Web 作为服务器,而是 使用 WebFlux 作为服务器 (本质是通过netty的io多路复用通信),Gateway 项目已经依赖了 starter-webflux,所以这里不要依赖 starter-web。
    <dependencies>
    <!-- spring cloud alibaba nacos discovery 依赖 -->
    <!--<dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.3.RELEASE</version>
    </dependency>-->
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 创建配置文件
    server:
      port: 7000
    
    spring:
      application:
        name: microservice-gateway
      cloud:
        gateway:
          routes:
            - id: router1 # 路由的ID
              uri: http://localhost:9000/user/{id} # 匹配后路由地址
              predicates: # 断言, 路径相匹配的进行路由
                - Path=/user/{id}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.创建服务microservice-user

    网关匹配后跳转到改服务接口。

    <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 编写配置文件
    server:
      port: 9000
    
    • 1
    • 2
    • 编写UserController
    @RestController
    public class UserController {
        @GetMapping("/user/{id}")
        public String hello(@PathVariable String id){
            return "Hello, user"+ id;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.测试

    • 启动microservice-gateway
    • 启动microservice-user
      谷歌浏览器访问:localhost:7000/user/2

    在这里插入图片描述

    项目源码

    https://gitee.com/indexman/microservice-learn

  • 相关阅读:
    Mybatis的一级缓存
    JavaWeb学习(4)注解案例:简单的测试框架
    Vue学习笔记(十):全局事件总线
    如何使用 Jmeter 进行抢购、秒杀等场景下,进行高并发?
    C语言-联合体与枚举类型
    IBM MQ 通道数量查看,以及最大通道数的修改
    要不要做全链路压测
    网络文件系统—NFS
    代码随想录笔记_链表_19两两交换链表中的节点
    MySQL 表的约束
  • 原文地址:https://blog.csdn.net/IndexMan/article/details/128119093