博客
关于我
微服务之Gateway实战讲解,小白必备哦!
阅读量:638 次
发布时间:2019-03-15

本文共 2475 字,大约阅读时间需要 8 分钟。

Spring Cloud Gateway 综述

1. Spring Cloud Gateway 概述

Spring Cloud Gateway 是 Spring Cloud 项目的全新成员,基于 Spring 5.0 + Spring Boot 2.0 及 Project Reactor 开发的一款高性能网关,旨在为微服务架构提供简便的统一 API 路由管理解决方案。它作为 Spring Cloud 生态系统中的核心网关,目标替代传统的 Zuul 1.x,以更高效地支持现代化的微服务环境。

2. Spring Cloud Gateway 特性

  • 现代化技术栈:建立在 Spring Framework 5 和 Project Reactor 的基础上,采用异步非阻塞模式,性能更优。
  • 灵活的路由管理:支持根据请求属性和路径进行路由匹配,可配置多种条件(如 header、cookie、path 等)。
  • 丰富的功能集成:内置 Hystrix 断路器、Spring Cloud DiscoveryClient 等,支持限流、监控等场景。
  • 易于使用的过滤器机制:支持自定义过滤器,能够在请求前后执行定制逻辑。
  • 动态路由支持:无需手动配置路由,GateWay 可直接从注册中心获取服务发现信息。

3. 为什么选择 Spring Cloud Gateway?

  • 更为现代化:基于异步非阻塞模型,性能优势明显。与最新的 Zuul 2.x 相比,GateWay 的未来发展更有保障。
  • 易于使用:功能简洁,配置方便,适合快速构建高性能网关。
  • 社区支持:作为 Spring Cloud 官方组件,有着成熟的生态和技术支持。

4. 工作流程概述

GateWay 处理请求的流程大致如下:

  • 请求接收:客户端向 GateWay 发起 HTTP 或 HTTPS 请求。
  • 路由匹配:GateWay 根据定义的路由规则判断请求路径是否匹配。
  • 过滤器处理:执行所有前置过滤器后,根据路由规则决定是否转发请求到目标服务。
  • 统一接口处理:转发请求后,依次执行后置过滤器,完成整个请求的处理过程。
  • 5. 环境搭建

    • 数据库配置:需创建并迁移 payment 表,字段结构如下:

      CREATE TABLE payment (  id INT PRIMARY KEY AUTO_INCREMENT,  `serial` VARCHAR(255) DEFAULT NULL);INSERT INTO payment VALUES (31, '皮皮虾'), (32, 'Code');
    • 服务注册:使用 Eureka 作为服务注册中心,将 8001 和 8003Portfolio 服务注册进系统。

    • 配置优化:GateWay模块依赖配置文件(如下图),如需动态路由,可参考后续配置。

    • 测试启动

      • 启动相关服务。
      • 检查所有服务注册状态,确保 GateWay 正确接收请求。

    6. 路由配置

    路由配置可通过 YAML 文件实现,配置示例如下:

    path_route:    - path: "/guonei"      uri: "https://news.baidu.com/guonei"

    支持多组路由配置,无需手动管理端口,可灵活设置路径和协议。

    7. 动态路由

    GateWay 可通过服务发现机制获取最新的服务列表,自动创建动态路由。默认规则:

    • 路由路径:/<服务名称>
    • URI:http://serviceName[${port}/][服务地址]

    可根据实际需求添加自定义路由策略。

    8. 常用 Predicate

    • After:过滤指定时间后的请求。
    • Cookie:根据 Cookie 属性匹配请求。
    • Header:根据 header 值匹配请求。

    9. 过滤器(Filter)

    过滤器用于自定义请求处理流程,需实现 GlobalFilter 和 Ordered 接口。CommonFilter 示例:

    import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.cloud.gateway.filter.Ordered;import org.springframework.stereotype.component;import java.util Mono;@Component(log = Log)public class CommonFilter implements GlobalFilter, Ordered {    @Override    public Mono
    filter(ServerWebExchange exchange, GatewayFilterChain chain) { String username = exchange.getRequest().getQueryParams().getFirst("uname"); if (username == null) { exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return 0; }}

    结语

    Spring Cloud Gateway 凭借现代化的技术栈和简洁易用的配置方式,已成为微服务架构中优选的网关解决方案。如果你对技术细节感兴趣,可以访问 GitHub 样例仓库进一步探索。欢迎在评论区留言交流!

    转载地址:http://xjolz.baihongyu.com/

    你可能感兴趣的文章
    HDU - 4109 Instrction Arrangement
    查看>>
    JQuery--手风琴,留言板
    查看>>
    MFC 自定义消息发送字符串
    查看>>
    Linux操作系统的安装与使用
    查看>>
    C++ 继承 详解
    查看>>
    OSPF多区域
    查看>>
    Docker入门之-镜像(二)
    查看>>
    数据结构——链表(3)
    查看>>
    socket模块和粘包现象
    查看>>
    去了解拉绳位移编码器的影响因素
    查看>>
    无法初始化Winsock2.2处理
    查看>>
    vMotion 操作失败进度卡在14% ,报错: Operation Timed out
    查看>>
    重置UAG Application admin密码
    查看>>
    Horizon Daas租户管理平台扩展分配时报:内部错误
    查看>>
    项目计划甘特图绘制说明
    查看>>
    嵌入式系统试题库(CSU)
    查看>>
    【自考】之信息资源管理(一)
    查看>>
    setup facatory9.0打包详细教程(含静默安装和卸载)
    查看>>
    ionic4 路由跳转传值
    查看>>
    pwn题shellcode收集
    查看>>