
微服务之Gateway实战讲解,小白必备哦!
请求接收:客户端向 GateWay 发起 HTTP 或 HTTPS 请求。 路由匹配:GateWay 根据定义的路由规则判断请求路径是否匹配。 过滤器处理:执行所有前置过滤器后,根据路由规则决定是否转发请求到目标服务。 统一接口处理:转发请求后,依次执行后置过滤器,完成整个请求的处理过程。
发布日期:2021-05-18 01:40:02
浏览次数:11
分类:精选文章
本文共 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 处理请求的流程大致如下:
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 Monofilter(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 样例仓库进一步探索。欢迎在评论区留言交流!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年05月07日 22时12分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
keepalived+nginx搭建高可用几个注意点
2019-03-15
在 Fedora Linux 操作系统上设置 Z Shell
2019-03-15
Linux内存布局
2019-03-15
使用axel多线程疯狂下载
2019-03-15
Python基础案例教程
2019-03-15
探索802.11ax
2019-03-15
Linux终端记录神器
2019-03-15
prometheus-kafka-exporter监控程序的部署
2019-03-15
Java学习第二章——Java基本语句
2019-03-15
ViewPager禁止滑动
2019-03-15
Creator2.0.9 屏蔽背景响应事件
2019-03-15