问题

今天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会不支持下划线的命名方式,可能是在底层代码会有一定的限制。此问题困扰了我半天,再此做以记录。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐