Spring AWS 中的云网关未正确路由

Spring Cloud Gateway in AWS not routing correctly

我创建了一个简单的 REST 服务,如下所示:

@RestController
public class ServiceController {

    @GetMapping(value = "/getSimpleResponse")
    public ResponseEntity<String> getSimpleResponse() {
        return new ResponseEntity<>("Hello from Service 1", HttpStatus.OK);
    }
}

我将其部署到 AWS elastic beanstalk 并且运行良好。这里:Service 1 in AWS

现在我创建一个 Spring 云网关服务,路由配置如下:

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(getFirstTestServiceRoute())
                .build();
    }

    private Function<PredicateSpec, Route.AsyncBuilder> getFirstTestServiceRoute() {
        return p -> p
                .path("/service1/**")
                .uri("http://testservice1-env.qgwe5a4qq8.ap-south-1.elasticbeanstalk.com/")
                .id("service1");
    }
}

我在 AWS Elastic beanstalk 中部署网关应用程序 here

但是 GatewayURL/service1/getSimpleResponse returns 一个白标错误页面。我期待与服务 1 相同的输出。我做错了什么?

尝试在浏览器中打开您在网关中设置的 URL,您将看到相同的 Whitelabel 错误页面。
您的端点是 /getSimpleResponse 但您的网关不知道。里面没有什么魔法,根据你的配置就可以了。

此外,您的堆栈也不会在本地工作。从让它在本地运行开始,然后才将它一点一点地移动到云端。

我在 class 级别缺少 RequestMapping。我的 URL 格式是

GatewayURL/service1/getSimpleResponse

我认为这是因为 Spring 云网关可能将完整路径 (/service1/getSimpleResponse) 附加到下游服务 URL

 @RestController
    @RequestMapping("/service1")
    public class ServiceController {

        @GetMapping(value = "/getSimpleResponse")
        public ResponseEntity<String> getSimpleResponse() {
            return new ResponseEntity<>("Hello from Service 1", HttpStatus.OK);
        }
    }