API 网关在微服务架构中至关重要,负责路由、负载均衡、安全防护和可观测性。Java 生态中有两大主流方案:
Spring Cloud Gateway(SCG)—— Spring 团队提供的现代化响应式方案。 Netflix Zuul 2 —— Zuul 的升级版,专为异步非阻塞 I/O 设计。 但 2025 年哪种更胜一筹?本文将从性能、功能特性和实际适用性进行对比,助你决策。
1、性能对比 基准测试结果(延迟与吞吐量) 指标 Spring Cloud Gateway Netflix Zuul 2 平均延迟(毫秒) 12 25 最大吞吐量(请求数/秒) 15,000 8,000 CPU 使用率 更低(响应式技术栈) 更高(基于 Servlet) 🔹 为何 Spring Cloud Gateway 胜出?
基于 Project Reactor(非阻塞式)。 无 Servlet 容器开销(与 Zuul 2 不同)。 专为 云原生负载 优化。 🔹 何时 Zuul 2 更合适?
若已深度集成 Netflix OSS 生态。 需更精细的过滤器(Zuul 2 内置过滤器更丰富)。 2、功能特性对比 功能特性 Spring Cloud Gateway Netflix Zuul 2 协议支持 HTTP/2、WebSockets HTTP/1.
1、概览 本文将带你了解如何在 UI (前端)应用中使用 Zuul 作为代理与 Spring REST 服务通信,使用 Zuul 代理的目的是为了统一处理 CORS 和 Same Origin Policy 问题。
Zuul 是 Netflix 基于 JVM 的路由和服务器端负载均衡器。Spring Cloud 与嵌入式 Zuul 代理进行了很好的集成。
2、Maven 配置 首先,在 UI 应用的 pom.xml 中添加 Spring Cloud Zuul 依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> <version>2.2.0.RELEASE</version> </dependency> 最新版本可在 此处 找到。
3、Zuul Properties 接着,在 application.yml 中对 Zuul 进行配置:
zuul: routes: foos: path: /foos/** url: http://localhost:8081/spring-zuul-foos-resource/foos 如上:
代理了资源服务器 Foos UI 应用上所有以 /foos/ 开头的请求都将转发到 Foos 资源服务器 http://loclahost:8081/spring-zuul-foos-resource/foos/ 4、API API 是一个简单的 Spring Boot 应用,监听 8081 端口。
1、概览 Zuul 是 Netflix 推出的基于 JVM 的网关和服务器端负载均衡器。Zuul 的规则引擎提供了灵活性,可以编写规则和过滤器(Filter)来增强在 Spring Cloud 微服务架构中的路由功能。。
本文将会带你了解如何通过自定义 Error Filter 来自定义 Zuul 中的异常和 Error 响应。当代码执行过程中发生错误时,这些自定义 Error Filter 将被执行。
2、Zuul 异常 Zuul 中处理的所有异常都是 ZuulException。
ZuulException 不能通过 @ControllerAdvice 捕获,也不能通过 @ExceptionHandling 对方法进行注解。这是因为 ZuulException 是由 Error Filter 抛出的。因此,它会跳过后续的过滤链,永远不会到达 Error Controller。下图描述了 Zuul 中错误处理的层次结构:
出现 ZuulException 时,Zuul 会显示以下错误响应:
{ "timestamp": "2022-01-23T22:43:43.126+00:00", "status": 500, "error": "Internal Server Error" } 在某些情况下,可能需要自定义 ZuulException 响应中的错误信息或状态码。这时,Zuul Filter 就能派上用场了。
3、自定义 Zuul 异常 spring-cloud-starter-netflix-zuul Starter 包括三种 Filter:Pre(前置)、Post(后置)和 Error(错误)。
本文重点深入了解 Error Filter。