问题
今天SpringCloud整合Gateway,然后在nacos中看到网关对应服务和业务对应服务已经是注册成功的,但是去调用一直报以下错误。
java.lang.IllegalStateException: Invalid host: lb://sandbox_manager
at org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.filter(RouteToRequestUrlFilter.java:86) ~[spring-cloud-gateway-core-2.2.5.RELEASE.jar:2.2.5.RELEASE]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ org.springframework.web.cors.reactive.CorsWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP GET "/admin/manager//user/info?token=admin-token" [ExceptionHandlingWebHandler]
Stack trace:
nacos中服务对应的名称。
我这边首先去掉gateway模块,通过前端去调用该接口发现没有任何问题,接口能够正常接收到请求并返回对应结果。然后大致可以确定问题在gateway上面。看上面这个错,大概就是说找不到“sandbox_manager”,我的网关配置如下。
server:
port: 9002
spring:
application:
name: sandbox_gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: sandbox_manager
uri: lb://sandbox_manager
predicates:
- Path=/*/manager/**
然后自己突发奇想,是不是命名有问题,然后将“sandbox_manager”改成了“sandbox-manager”,请求网关转发成功。
改过的配置如下,需要在对应业务模块将spring.application.name也改成中杠格式。
server:
port: 9002
spring:
application:
name: sandbox-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: sandbox-manager
uri: lb://sandbox-manager
predicates:
- Path=/*/manager/**
总结
不知道为什么,gateway会不支持下划线的命名方式,可能是在底层代码会有一定的限制。此问题困扰了我半天,再此做以记录。