Spring Cloud API Gateway无法转发至Netflix DGS GraphQL端点求助
解决Spring Cloud Gateway转发Netflix DGS GraphQL请求404问题
问题原因
你当前的路由配置中,第二个路由的uri直接指定了完整路径http://localhost:3000/graphql,Spring Cloud Gateway会自动将原始请求的路径/userService/graphql追加到这个uri之后,最终转发的地址变成http://localhost:3000/graphql/userService/graphql,这与DGS服务的/graphql端点不匹配,导致返回404。而REST接口的路由因为uri指向服务根地址,请求路径追加后刚好匹配后端接口,所以可以正常工作。
修正后的路由配置
使用RewritePath过滤器将网关请求路径重写为DGS服务的/graphql路径,修改后的代码如下:
@Bean fun routes(builder: RouteLocatorBuilder): RouteLocator{ return builder.routes() .route{it.path("/v1/users/**").uri("http://localhost:3000")} .route{ it.path("/userService/graphql") .filters{ f -> f.rewritePath("/userService/graphql", "/graphql") } .uri("http://localhost:3000") } .build() }
另一种可选配置
也可以使用stripPrefix过滤器去掉请求路径中的/userService前缀,让剩余的/graphql直接映射到DGS服务的端点:
@Bean fun routes(builder: RouteLocatorBuilder): RouteLocator{ return builder.routes() .route{it.path("/v1/users/**").uri("http://localhost:3000")} .route{ it.path("/userService/graphql") .filters{ f -> f.stripPrefix(1) } .uri("http://localhost:3000") } .build() }
验证修改
配置更新后,重新启动网关服务,再次通过http://localhost:8080/userService/graphql发送GraphQL请求,应该能正常转发到DGS服务的/graphql端点并得到响应。
内容的提问来源于stack exchange,提问作者jwsinner
相关产品推荐
相关产品推荐

