gpt4 book ai didi

java - openshift 中 Spring Boot/VertX 调用超时

转载 作者:行者123 更新时间:2023-12-02 08:39:24 29 4
gpt4 key购买 nike

我正在尝试从 Spring Boot 服务调用 vertx 服务,并且这两个服务都部署在 openshift 中;但遇到了这个异常:

2020-04-28 03:25:12.556 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://vertx-service:8080/": Connection timed out (Connection timed out); nested exception is java.net.ConnectException: Connection timed out (Connection timed out)] with root cause java.net.ConnectException: Connection timed out (Connection timed out) ...

这是用于从 Spring Boot 应用程序调用服务的代码:

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());
});
}
}

其他信息:还使用 swagger 开发了一个 api-gateway 服务来调用服务,并从 Spring Boot 服务获得成功,但从 vertx 服务获得响应(回退)。

使用的版本:Spring Boot 2.2、Vertx 3.3、Minishift 3.11

最佳答案

你有没有尝试过

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

您的网址中不需要端口 8080。假设 vertx-service 是 Openshift 上部署的另一个服务对象的名称。同时检查vertx-service的pod详细信息,该端口是否在容器中暴露。

在 openshift 中,服务名称充当容器镜像的所有 pod 实例的负载均衡器。

关于java - openshift 中 Spring Boot/VertX 调用超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61473336/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com