最近在进行spring cloud gateway 整合 sentinel 在此过程中遇到的问题进行汇总
1. spring gateway 整合sentinel gateway的路由会自动加一个前缀 效果如下
问题原因 代码在 org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator#DiscoveryClientRouteDefinitionLocator(java.lang.String, org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties)
断点的结果
问题原因:会进行判断是否存在路由前缀 不存在则进行 拼接
问题的解决办法:增加配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
lowerCaseServiceId: true
#需要新增的配置
routeIdPrefix: xx_
后续需要注意: 根据routeId限流时 要配置 前缀+项目名称 如上这种写法需要配置的routeId 为 xx_gateway-service
问题二 sentinel流控规则里阀值不生效
从1.6.3版本开始,Sentinel Web filter默认收敛所有URL的入口context,因此链路限流不生效。1.7.0版本开始(对应SCA 2.1.1.RELEASE),我们在CommonFilter引入了WEB_CONTEXT_UNIFY这个init parameter,用于控制是否收敛context。将其配置为false即可根据不同的URL进行链路限流。 参考:https://github.com/alibaba/sentinel/issues/1213
官方文档: https://sentinelguard.io/zh-cn/docs/api-gateway-flow-control.html
问题三 服务注册不到sentinel dashboard
- 这个注册默认有点慢 需要等等
- 单个应用的话 可以检查 用户目录下的日志文件 用户目录/logs/csp 看看有无对应服务的日志 另外 可以看下 sentinel 启动日志 确保sentinel 可以访问到
- 另外加上如下配置 尝试一下
spring:
cloud:
sentinel:
eager: true
- 如上都没有解决的话 检查下 sentinel client和服务端版本是否 一致
可能存在版本不兼容问题 - 可能用户无权限 写入日志到用户目录下 默认会写入日志到用户目录下
问题四 异常处理器失效的问题
- 检查 默认的异常处理器 有无生效
启动会进行打印日志
2023-01-11 14:24:55.892 INFO [main] [,,,] c.a.c.s.gateway.scg.SentinelSCGAutoConfiguration.sentinelGatewayFilter - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648
2023-01-11 14:24:56.186 INFO [main] [,,,] c.a.c.s.gateway.scg.SentinelSCGAutoConfiguration.sentinelGatewayBlockExceptionHandler - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler
- 检查是否压测方式以及断言有问题
当使用Aoifox进行压测 发现居然100% 成功
后来修改为 jmter 才发现正常的
问题五 限流无法生效
可能有的博客说 注:SpringBoot版本大于 2.2.0 以及小于 2.3.1才可以,超过这个版本Sentinel网关限流将不生效;这个说法不一定准 可能存在一定的道理
spring boot spring cloud 以及 spring cloud alibaba 版本很关键 建议直接使用 官方的版本说明
官方的版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
传送图 如下 根据springboot版本来匹配
目前使用生效的版本
spring boot : 2.3.12.RELEASE spring cloud: Hoxton.SR12
spring cloud alibaba: Hoxton.SR12
spring gateway 整合sentinel 官方文档 : https://sentinelguard.io/zh-cn/docs/api-gateway-flow-control.html