news 2026/9/3 7:27:25

微服务 - Higress网关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微服务 - Higress网关

前面我们已经介绍了微服务网关的基本概念,接下来我们重点介绍如何使用 Higress 来构建高性能的 AI 原生 API 网关。

作为系统的统一入口,Higress 网关为我们提供了以下核心能力:

  • 统一入口:为所有微服务提供统一的访问入口,简化客户端的调用复杂度。

  • 请求路由:根据请求的路径、参数等信息,将请求路由到正确的微服务实例。

  • 负载均衡:在多个服务实例之间分发请求,提高系统的可用性和性能。

  • 安全认证:统一处理身份验证、权限控制等安全相关功能。

  • 限流熔断:实现请求限流、服务熔断等保护机制,防止系统过载。

  • 监控日志:收集请求日志、监控指标等信息,便于系统运维和问题排查

Higress 安装

Higress 的安装需要 Docker 环境支持,启动成功后,可以通过 8001 端口访问 Higress 控制台:

服务来源配置

在 Higress 控制台中配置服务来源,可以从 Nacos 中获取服务来源:

需要注意的是,注册中心地址不支持 127.0.0.1 或 localhost,需要使用本机的内网地址。

配置完成后,Higress 会自动发现在 Nacos 中注册的所有微服务:

但是 Dubbo + Nacos 默认只注册 Dubbo 服务(RPC接口),而不注册 HTTP 接口。我们对外提供的服务都没有被发现,需要手动注册:

路由配置

这样一来,前端只需要访问网关的地址 localhost:8080/api/user/xxx,就会自动转发到对应的服务 localhost:8124/api/user/xxx。

路由配置完成:

完成路由配置后,需要修改前端 vite 请求代理地址为 8080 端口,然后就可以利用前端来测试完整业务流程了,能正常登录和生成网站就说明配置成功。

如果你使用了 Spring Cloud 作为服务发现(而不是 Dubbo),可以 整合 Nacos 快速发现服务。

权限认证问题解决

在微服务改造过程中,我们发现之前的 AOP 鉴权没有生效,因为只有用户模块有 AOP 鉴权类。

比如未登录时调用管理员查询对话历史接口,发现也能调用:

如果我们使用的是 Spring Cloud Gateway,可以在项目入口处自定义鉴权逻辑。但现在 Higress 是独立的组件,很难编写和已有项目集成的自定义逻辑。

怎么办呢?

aop/AuthInterceptor 是一个有点儿特殊的类,由于依赖了 UserService 和 User 实体类,无法放到 common 包中。如果单独存放在用户模块,其他服务想要使用就得引入用户模块(违背了微服务的原则),所以比较快速的解决方案是,后续每个需要鉴权的服务单独复制这个类即可。

比如在应用模块中引入:

@Aspect @Component public class AuthInterceptor { /** * 执行拦截 * * @param joinPoint 切入点 * @param authCheck 权限校验注解 */ @Around("@annotation(authCheck)") public Object doInterceptor(ProceedingJoinPoint joinPoint, AuthCheck authCheck) throws Throwable { String mustRole = authCheck.mustRole(); RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); // 当前登录用户 User loginUser = InnerUserService.getLoginUser(request); UserRoleEnum mustRoleEnum = UserRoleEnum.getEnumByValue(mustRole); // 不需要权限,放行 if (mustRoleEnum == null) { return joinPoint.proceed(); } // 以下为:必须有该权限才通过 // 获取当前用户具有的权限 UserRoleEnum userRoleEnum = UserRoleEnum.getEnumByValue(loginUser.getUserRole()); // 没有权限,拒绝 if (userRoleEnum == null) { throw new BusinessException(ErrorCode.NO_AUTH_ERROR); } // 要求必须有管理员权限,但用户没有管理员权限,拒绝 if (UserRoleEnum.ADMIN.equals(mustRoleEnum) && !UserRoleEnum.ADMIN.equals(userRoleEnum)) { throw new BusinessException(ErrorCode.NO_AUTH_ERROR); } // 通过权限校验,放行 return joinPoint.proceed(); } }

如果需要鉴权的服务较多,更优雅的方式是写一个单独的鉴权服务,感兴趣的同学可以了解下 OAuth2 协议。

同时,我们可以利用 Higress 插件的请求屏蔽和认证机制,组合使用 Higress + 服务内鉴权,实现多层次的安全防护。

接口文档聚合

在微服务架构中,每个服务都有自己的接口文档,为了方便查看和管理,我们可以考虑接口文档聚合。

Knife4j 提供了 接口文档聚合功能,支持 Cloud 模式自己填写要聚合的服务地址配置;也支持跟 Higress 网关一样,采用 Nacos 模式自动发现。

但很坑的是,这种方式只支持 Spring Boot 2,Spring Boot 3 根本无法启动!

作为替代方案,可以考虑自己写一个导航网站(用 AI 生成即可),点击某个服务后就跳转到对应的接口文档页面。

项目部署

微服务项目的部署相比单体应用更加复杂,需要考虑多个服务的协调启动、服务发现、配置管理等问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:06:26

Sambert-HifiGan模型压缩技巧:减小体积保持音质

Sambert-HifiGan模型压缩技巧:减小体积保持音质 🎯 引言:中文多情感语音合成的挑战与需求 随着AI语音技术的发展,高质量、低延迟、轻量化的端到端语音合成系统已成为智能客服、有声阅读、虚拟主播等场景的核心基础设施。在众多开源…

作者头像 李华
网站建设 2026/9/2 18:23:16

如何优化Sambert-HifiGan的GPU资源使用效率?

如何优化Sambert-HifiGan的GPU资源使用效率? 引言:中文多情感语音合成的现实挑战 随着AIGC技术的快速发展,高质量语音合成(TTS)在智能客服、有声读物、虚拟主播等场景中广泛应用。其中,Sambert-HifiGan 作为…

作者头像 李华
网站建设 2026/9/2 22:08:07

Sambert-HifiGan性能深度测评:合成速度、音质与情感表现全面对比

Sambert-HifiGan性能深度测评:合成速度、音质与情感表现全面对比 在中文语音合成(TTS)领域,多情感表达能力已成为衡量模型实用性的关键指标。传统TTS系统往往只能输出“朗读腔”语音,缺乏情绪起伏和语义层次感&#x…

作者头像 李华
网站建设 2026/9/2 22:08:15

10款AI视频生成工具测评:Image-to-Video脱颖而出

10款AI视频生成工具测评:Image-to-Video脱颖而出 在AIGC(人工智能生成内容)快速演进的今天,AI视频生成技术正从实验室走向大众创作。从文本到视频(Text-to-Video)、图像到视频(Image-to-Video&a…

作者头像 李华
网站建设 2026/9/2 22:07:58

如何让AI生成更自然的动作?帧率与引导系数调优术

如何让AI生成更自然的动作?帧率与引导系数调优术 在图像转视频(Image-to-Video, I2V)生成任务中,静态图像的“动起来”不仅是技术挑战,更是艺术表达的关键。当前主流模型如 I2VGen-XL 已具备从单张图片生成连贯动态视频…

作者头像 李华
网站建设 2026/9/2 23:44:05

UEditor如何通过控件实现Excel数据到编辑器的直接导入?

从Word到UEditor的奇幻漂流:一个前端程序员的踩坑实录 第一章:需求降临——当甲方说"要导入Word"时 "小王啊,咱们新项目要加个功能,能把Word文档直接导进编辑器里,图片和样式都得保留。"项目经理…

作者头像 李华