shenyu v2.7.0.3¶
为什么要使用Shenyu¶
想象一下这个场景:你正带领团队在微服务的星辰大海中全速航行。起初,一切井然有序,每个服务都像一颗精准的卫星,运行在自己的轨道上。但随着服务数量爆炸式增长,你突然发现自己陷入了泥潭——流量管控、权限验证、监控日志、动态路由,这些本该助力前行的基础设施,却成了缠绕双脚的荆棘。你不得不为每一个服务重复编写相似的网关逻辑,团队的精力和创新激情,正在被无穷无尽的“胶水代码”和配置同步问题消耗殆尽。
你面临着一个核心矛盾:业务开发追求的是敏捷与创新,而服务治理要求的却是统一与管控。 开发者在左,运维者在右,一道难以逾越的鸿沟悄然出现。你是否曾幻想过,能有一个“中枢神经”系统,它无需你深刻理解网关的所有复杂原理,就能让你像搭积木一样,自由组合所需的功能,动态管理所有API的生命周期?
这就是Shenyu诞生的意义。它并非又一个冰冷的网关工具,而是为你团队赋能的**API治理框架**。它的核心理念是 “插件化” —— 将鉴权、限流、熔断、日志、监控等各种治理能力抽象为即插即用的插件。你的开发者无需成为网关专家,只需通过简单的注解,就能将服务接口托付给Shenyu,并获得所需的一切治理能力。它统一了管理平面,让运维者能在一个控制台上纵览全局,动态配置,实时生效。
选择Shenyu,就是选择跳出“重复造轮子”和“运维黑盒”的困境。它让你从繁琐的治理工作中解放出来,将注意力重新聚焦于构建卓越的业务逻辑本身。在瞬息万变的数字时代,拥有一个灵活、强大且易用的治理中枢,意味着你的舰队获得了精准的导航与强大的护航,可以更无畏地驶向创新的深水区。
Shenyu是什么¶
Apache ShenYu 是一个高性能、插件化的**微服务API网关**。它致力于为微服务架构提供流量治理、协议转换、API统一管理和监控等一站式解决方案。其核心特点是**全异步、高性能、插件化**,支持热插拔各种功能插件,并提供了丰富的协议支持(如HTTP、gRPC、Dubbo、Spring Cloud等)与数据同步方式(如ZooKeeper、Nacos、Apollo等)。简单说,它是微服务时代的**API流量管理与治理中枢**。
入门示例¶
让我们置身于一个真实的开发场景:你正在开发一个电商系统,其中包含**用户服务(UserService)** 和**商品服务(ProductService)**。你需要将这些服务的HTTP API安全、可控地暴露给前端应用。
没有Shenyu时: 你可能需要为每个服务单独配置Nginx路由规则,编写统一的鉴权过滤器,搭建独立的监控体系。每新增一个接口,都需要在多处同步配置,繁琐且易错。
使用Shenyu后: 场景:将 UserService 的查询用户详情接口 /user/getById 通过Shenyu网关暴露。
1. 服务端(提供者)集成: 在你的Spring Boot UserService 应用中,只需引入shenyu-spring-boot-starter客户端依赖,并在启动类和应用配置中添加少量配置,指明Shenyu网关的注册地址。
2. 通过注解暴露API: 在你需要暴露的Controller方法上,使用一个简单的注解即可。例如,使用@ShenyuSpringMvcClient(对于Spring MVC项目):
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/getById")
@ShenyuSpringMvcClient(path = "/user/getById", desc = "根据ID查询用户")
public UserDTO getById(@RequestParam("id") String id) {
// ... 你的业务逻辑
return userService.findById(id);
}
}
3. 网关管理与配置: 启动Shenyu网关(Admin和Bootstrap)后,你可以登录到Shenyu自带的管理控制台(Dashboard)。你会发现,UserService已经自动注册上来,接口 /user/getById 也已就绪。
4. 动态增强功能(插件化): 现在,你想为该接口添加**鉴权**和**限流**功能,无需修改UserService的代码。 - 在管理控制台的“插件”列表,启用 JWT 或 Sign 鉴权插件,并配置规则。 - 启用 Rate Limiter 限流插件,为 /user/getById 配置每秒请求数上限。 - 所有这些配置都是**热生效**的。瞬间,你的接口就拥有了强大的治理能力。
5. 客户端调用: 前端或第三方服务不再直接访问 UserService 的原始地址(如 http://user-service-host:8080/user/getById),而是统一通过Shenyu网关地址访问(如 http://shenyu-gateway-host:9195/user/getById)。所有流量都将经过Shenyu,并执行你配置的插件链逻辑。
通过这个示例,你可以看到Shenyu如何将复杂的网关治理能力**服务化、可视化、动态化**,极大提升了微服务API管理的效率和体验。
Shenyu v2.7.0.3版本更新了什么¶
根据官方发布日志,Shenyu v2.7.0.3 是一个以修复、增强和优化为主的版本。其主要内容包括: 1. 问题修复:重点解决了Nacos数据同步下缓存删除、MCP服务器插件长请求配置、Redis限流器类型转换等多项关键Bug。 2. 功能增强:显著增强了AI代理功能,集成SpringAI并支持降级与代理API密钥;同时,MCP服务器插件新增了自动注册和对对象/数组参数的支持。 3. 代码质量与可维护性提升:增加了大量单元测试(UT),重构了注册表、选择器、规则等模块的保留关键字字段,并将多处中文注释翻译为英文。 4. 数据同步与状态管理优化:HTTP/WebSocket同步模式支持了心跳检测,改进了网关与客户端的状态管理逻辑。 5. 基础设施与依赖更新:优化了构建流程(引入mvnd,改进GitHub CI),同步了仪表盘,并更新了ZooKeeper等