当前位置: 首页 > java >正文

网关-微服务网关入门

网关-微服务网关入门

在微服务架构中,网关(Gateway) 是一个非常重要的组件,它位于客户端与微服务之间,作为所有请求的统一入口。网关的主要作用是对请求进行路由、过滤、限流、鉴权、负载均衡等操作,从而简化客户端与微服务之间的交互逻辑。


一、网关的作用

功能说明
路由转发(Routing)根据请求路径将请求转发到对应的微服务
统一入口(API Entry)所有请求都经过网关,避免客户端直接调用多个服务
身份认证(Authentication)在网关层做统一的鉴权,如 JWT 校验
权限控制(Authorization)控制不同用户或角色对 API 的访问权限
限流(Rate Limiting)限制单位时间内请求次数,防止系统过载
熔断与降级(Circuit Breaker)当服务不可用时,返回默认响应,提升系统稳定性
日志记录(Logging)记录请求日志,便于监控和审计
协议转换(Protocol Translation)如 HTTP 转 gRPC、WebSocket 等
负载均衡(Load Balancing)请求分发到多个服务实例,提高可用性

二、常见的网关实现方案

网关类型说明适用场景
Spring Cloud GatewaySpring 官方推荐的网关,基于 WebFluxSpring Cloud 微服务架构
Zuul(Netflix)Netflix 开源的同步网关(已过时)旧版 Spring Cloud 项目
Kong基于 Nginx 的高性能网关,支持插件扩展企业级 API 管理、高并发场景
Envoy由 Lyft 开源,支持多种协议,适合云原生服务网格(Service Mesh)环境
Nginx + Lua使用 Lua 脚本扩展 Nginx 实现网关功能高性能、低延迟场景
Traefik支持自动服务发现,与 Kubernetes 集成良好云原生、K8s 环境

三、Spring Cloud Gateway 的核心概念

1. Route(路由)

  • 定义了请求如何转发到具体的服务。
  • 包含:ID、目标 URI、断言(Predicate)、过滤器(Filter)等。

2. Predicate(断言)

  • 用于匹配请求是否符合路由条件。
  • 示例:路径、方法、Header、Query 参数等。

3. Filter(过滤器)

  • 对请求和响应进行拦截处理。
  • 可用于鉴权、限流、日志记录等。

四、Spring Cloud Gateway 示例配置(application.yml

spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/api/user/**filters:- StripPrefix=1- AuthFilter- id: order-serviceuri: lb://order-servicepredicates:- Path=/api/order/**filters:- StripPrefix=1
  • id:路由唯一标识
  • uri:目标服务地址,lb 表示使用负载均衡
  • predicates:路由匹配规则(如路径)
  • filters:请求过滤器(如鉴权、限流)

五、自定义过滤器(Filter)

@Component
public class AuthFilter implements GatewayFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token == null || !token.startsWith("Bearer ")) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}// 验证 token 合法性(如 JWT 解析)return chain.filter(exchange);}@Overridepublic int getOrder() {return 0; // 过滤器顺序}
}
  • 在请求进入具体服务前进行身份验证
  • 可结合 JWT、OAuth2、Spring Security 等实现统一鉴权

六、网关在微服务架构中的位置

[客户端] → [网关(Gateway)] → [微服务A]、[微服务B]、[微服务C]
  • 所有请求必须经过网关
  • 网关负责将请求路由到正确的服务
  • 网关可集中处理安全、限流、日志等通用逻辑

七、网关的部署方式

部署方式说明
单实例部署简单,适合小型项目
集群部署提高可用性和性能
Kubernetes Ingress在 K8s 中使用 Ingress 作为网关
API 网关 + 服务网格在 Istio 等服务网格中作为外部入口

八、总结:网关的核心价值

价值说明
统一入口所有请求都通过网关进入系统
安全控制集中处理身份认证、权限控制
服务治理限流、熔断、负载均衡
日志监控统一记录请求日志,便于分析
协议兼容支持多种协议转换
灵活扩展可通过插件或自定义 Filter 扩展功能

九、推荐使用场景

  • 微服务数量较多,需要集中管理 API
  • 需要统一鉴权、限流、日志记录
  • 使用 Spring Cloud 技术栈
  • 需要支持动态路由和服务发现
  • 需要高并发、高性能的 API 管理能力

如果使用 Spring Boot + Spring Cloud 构建微服务系统,Spring Cloud Gateway 是一个非常推荐的选择,它与 Spring 生态集成良好,支持响应式编程模型,具备高性能和可扩展性。

http://www.xdnf.cn/news/15646.html

相关文章:

  • STM32-第七节-TIM定时器-3(输入捕获)
  • 深度解析Linux文件I/O三级缓冲体系:用户缓冲区→标准I/O→内核页缓存
  • 如何在服务器上获取Linux目录大小
  • Mysql数据库——增删改查CRUD
  • *SFT深度实践指南:从数据构建到模型部署的全流程解析
  • 1-大语言模型—理论基础:详解Transformer架构的实现(1)
  • LeetCode|Day18|20. 有效的括号|Python刷题笔记
  • 【数据可视化-67】基于pyecharts的航空安全深度剖析:坠毁航班数据集可视化分析
  • 小记_想写啥写啥_实现行间的Latex公式_VScode始终折叠大纲
  • 【Linux】基本指令(入门篇)(上)
  • 从0开始学习R语言--Day50--ROC曲线
  • 【深度学习】神经网络 批量标准化-part6
  • 苹果ios系统IPA包企业签名手机下载应用可以有几种方式可以下载到手机?
  • Go运算符
  • vue2 面试题及详细答案150道(91 - 100)
  • 系统IO对于目录的操作
  • 在断网情况下,网线直接连接 Windows 笔记本和 Ubuntu 服务器进行数据传输
  • AI产品经理面试宝典第36天:AI+旅游以及行业痛点相关面试题的指导
  • 小红书采集工具:无水印图片一键获取,同步采集笔记与评论
  • Golang 中 JSON 和 XML 解析与生成的完全指南
  • SpringBoot切片上传+断点续传
  • vue3引入cesium完整步骤
  • NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)
  • 如何防止GitHub上的敏感信息被泄漏?
  • Visual Studio C++编译器优化等级详解:配置、原理与编码实践
  • imx6ull UI开发
  • 20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
  • 短视频矩阵的时代结束了吗?
  • 【推理的思想】程序正确性证明(一):演绎推理基础知识
  • 网络编程(modbus,3握4挥)