Тайм-аут вызова Spring Boot / VertX в openshift - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь вызвать службу vertx из службы весенней загрузки, и обе службы развернуты в openshift; но получил это исключение:

2020-04-28 03: 25: 12.556 ОШИБКА 1 --- [nio-8080-exe c -1] oa c. c. C. [. [. [/]. [DispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса; вложенное исключение: org.springframework.web.client.ResourceAccessException: ошибка ввода-вывода при запросе GET для «http://vertx-service: 8080 / »: истекло время ожидания соединения (истекло время ожидания соединения); вложенное исключение: java. net .ConnectException: Тайм-аут соединения (Тайм-аут соединения)] с root причиной java. net .ConnectException: Тайм-аут соединения (Тайм-аут соединения) ...

Этот код используется для вызова службы из приложения весенней загрузки:

RestTemplate template = new RestTemplate();
String url = "http://vertx-service:8080/"; // I'm using discovery pattern here
String response = template.getForEntity(url, String.class).getBody());

Это код приложения vertx:

public class SimpleWebVerticle extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        Router router = Router.router(vertx);

        router.get("/").handler(this::handleGet);

        router.route().handler(BodyHandler.create());
        vertx.createHttpServer().requestHandler(router::accept).listen(8080);
    }

    private void handleGet(RoutingContext routingContext) {
        routingContext.vertx().<String>executeBlocking(future -> {
            String response;
            CompletableFuture<String> cf = CompletableFuture.supplyAsync(
                    () -> {
                        String res = "Hello from VertX! Server name: "
                        + System.getenv().getOrDefault("HOSTNAME", "unknown");
                        return res;
                    });
            try {
                response = cf.get();
            } catch (InterruptedException | ExecutionException e) {
                response = e.getMessage();
            }
            future.complete(response);
        }, false, result -> {
            routingContext.response()
                    .putHeader("Content-Type", "text/plain")
                    .end(result.result());
        });
    }
}

Дополнительная информация: также разработали службу API-шлюза, использующую swagger для вызова служб, и получили успех от службы весенней загрузки, но получили ответ (откат) от службы vertx.

Используемые версии: Spring Boot 2.2, Vertx 3.3, Minishift 3.11

1 Ответ

2 голосов
/ 28 апреля 2020

Вы пробовали только с

String url = "http://vertx-service/"; 

Порт 8080 не требуется в вашем URL. Предполагая, что vertx-service является именем другого сервисного объекта, развернутого в Openshift. Также проверьте информацию о модуле vertx-service, открыт ли порт в контейнере.

В openshift имя службы выступает в качестве балансировщика нагрузки для всех экземпляров модуля образа контейнера.

...