Spring Cloud Gateway в AWS неправильно маршрутизируется - PullRequest
0 голосов
/ 16 января 2020

Я создал простой сервис REST, как показано ниже:

@RestController
public class ServiceController {

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

Я развернул его на AWS elasti c beanstalk и работает нормально. Здесь: Служба 1 в AWS

Теперь я создаю службу Spring Cloud Gateway с конфигурацией маршрута, как показано ниже:

@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 Elasti c beanstalk здесь .

Но GatewayURL / service1 / getSimpleResponse возвращает страницу ошибки Whitelabel. Я ожидал того же вывода, что и служба 1. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Мне не хватало RequestMapping на уровне класса. Мой формат URL:

GatewayURL / service1 / getSimpleResponse

Я предполагаю, что это потому, что Spring Cloud Gateway, вероятно, добавляет полный путь (/ 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);
        }
    }
0 голосов
/ 18 января 2020

Попытайтесь открыть URL, который вы задали в своем шлюзе, в браузере, и вы увидите ту же страницу ошибки Whitelabel.
Ваша конечная точка - / getSimpleResponse, но ваш шлюз не знает об этом. В нем нет маги c, он работает в соответствии с вашей конфигурацией.

Более того, ваш стек также не будет работать локально. Начните с того, чтобы заставить его работать локально, и только потом перемещайте его по частям в облако.

...