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

SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503

文章目录

  • 前言
  • 一、问题
  • 二、原因
    • 1.分析
    • 2.配置静态路由再试
    • 3.定位
  • 总结


前言

       本来昨天就应该也记录下,免得忘记的,但是有点晚了,酒没写,真的是被坑惨了。
       当然这也是追求最新的代价,也是对新技术、老知识点的重温。


一、问题

       就是网关调子服务的报503的问题,请求能进网关,子服务单独访问也正常,但是就是死活不能跳子服务,都进不了子服务在controller上打的断点(子服务也没有拦截)。

二、原因

  • 我这里是SpringCloud2025.0.0 + Springboot3.5.0,
  • 网关gateway用webflux,(spring-cloud-starter-gateway-server-webflux + spring-boot-starter-webflux)
  • 子服务还是在用传统的web,不用webflux
  • gateway配置采用动态路由
    现在的现象就是服务在nacos都是正常的:
    在这里插入图片描述
    但是用ApiFox就是不能跳转到子服务:
    在这里插入图片描述
    网关能进,也不报错:
    在这里插入图片描述
    子服务直接访问是正常:
    在这里插入图片描述

1.分析

首先,子服务是暴露了health的

management:endpoints:web:exposure:include: gateway,health,info  # 开放 Gateway 相关端点endpoint:health:show-details: alwaysgateway:enabled: true  # 确保 Gateway 端点启用(默认 true)

路由侧查看路由:
在这里插入图片描述
子服务侧查看健康状态:
在这里插入图片描述
然后,通过gateway访问子服务酒报503:
在这里插入图片描述
其实报503就已经说明网关已经正常转发子服务了,出503也就几个原因:

  • 子服务被网关认为不健康,所以转发不成功
  • 子服务服务名称不正确,这个可以检查配置,或在nacos的服务列表看(动态路由)
  • 路由名称错误(静态路由)
  • 网关转发没有截取前面的url (strip-prefix的属性设置true,就会自动截取)

2.配置静态路由再试

其实,我是一个怕麻烦的人,配置能少我绝不会多写,也怕误导其他人,但是这是在是把我逼的没有办法了。
在gateway的application.yaml增加配置

spring:cloud:gateway:routes:- id: test-device-routeuri: http://127.0.0.1:18081predicates:- Path=/test-device/**filters:- StripPrefix=1

网关试试静态路由地址:
在这里插入图片描述
       居然正常,它怎么能正常呢?为什么动态路由不正常呢?

3.定位

静态路由正常、动态路由异常,只能说明:

  • 动态路由服务名错误 (显然这个排查我做了无数遍了)
  • 路由转发了,但是子服务不正常 (显然网关转发了,但是没有进子服务,那么就是子服务反馈给注册中心的状态不可用,但是实际又是可用)

       综上,最后怀疑是服务负载均衡的有问题,现在负载均衡都是loadbalancer,应该没有Netflix Ribbon(springCloud2020后官方就移除了),那么是不是loadbalancer没有引入呢?
这个在之前搭建之前,其实我也疑惑,没有引入,以为现在新版本不需要引入了。也在ds查了:
在这里插入图片描述
       显然,我没有自定义,我就直接用动态路由了,娜我还需要引入?不管了,引入试试就是,在gateway的pom增加

<!-- 显示引入 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

在这里插入图片描述

然后,再试:
在这里插入图片描述
       它居然正常了,真是一口老血,那么那就可以肯定是gateway的webflux包没有引入loadbalancer以来,现在反向点他们的依赖看他们的pom:

在这里插入图片描述
在这里插入图片描述

       那这就可以结案了。


总结

       用最新的,还是很多坑,但是这应该不是spring-cloud-starter-gateway-server-webflux的bug,这不在里面直接依赖了,这样处理:

  • 依赖更粒度
  • 让架构的知识面更高,需要非常清楚
  • 另外说不定是有新的负载均衡要出现了,就想当初loadbalancer取代Ribbon一样

       好了,真是坑了半夜,昨晚都没有写,今天才复盘,希望能帮到大家,让更多在坑里的技术人爬出来。

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

相关文章:

  • Pinocchio 库详解及其在足式机器人上的应用
  • 板凳-------Mysql cookbook学习 (十--2)
  • Linux权限探秘:驾驭权限模型,筑牢系统安全
  • 【PyCharm必会基础】正确移除解释器及虚拟环境(以 Poetry 为例 )
  • 2025新高考二卷选择题第一题题解
  • 嵌入式全栈面试指南:TCP/IP、C 语言基础、STM32 外设与 RT‑Thread
  • MATLAB遍历生成20到1000个节点的无线通信网络拓扑推理数据
  • 大实验:基于赛灵思csg324100T,pmodMAXsonar的危险距离警报
  • [论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景
  • 基于贝叶斯网络构建结构方程_TomatoSCI分析日记
  • Qwen系列之Qwen3解读:最强开源模型的细节拆解
  • 计数排序_桶排序
  • 从 Vue 2.0 进阶到 Vue 3.0 的核心技术解析指南
  • **解锁 C++ std::map 的力量**
  • android 布局小知识点 随记
  • OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践
  • 数据的输出、输入
  • 20242817李臻-安全文件传输系统-项目验收
  • springboot2.x升级springboot3.x
  • 端午编程小游戏--艾草驱邪
  • 【SpringBoot自动化部署方法】
  • UDP与TCP通信协议技术解析
  • XXL-JOB——源码分析解读(1)
  • 英语词汇表格 form, table, sheet, grid, tabulation 的区别
  • 打卡第38天:早停策略和模型权重的保存
  • Maven的配置与运行
  • 【强化学习】——04Model-Based RL
  • 垃圾回收相关八股
  • IDEA中的debug使用技巧
  • 伽罗华域GF(galois field)的乘法计算 - 查表法