gpt4 book ai didi

java - Vertx.io GET 无提示失败

转载 作者:行者123 更新时间:2023-11-30 02:13:46 26 4
gpt4 key购买 nike


我正在使用 vertx 编写一个 POC,当我们必须将 Spring Web 从 4.x 迁移到 5 以兼容 java 9 时寻找替代方案。我编写了一个简单的客户端,只是对一个公开可用的服务器进行 GET 操作,只是为了让某些东西正常工作,但它却默默地让我失败了。

    public List<String> pull() {

Vertx vertx = Vertx.vertx();

HttpClientOptions options = new HttpClientOptions().setLogActivity(true);
HttpClient hc = vertx.createHttpClient(options);
hc.getNow(80, "http://sunet.se", "/",r -> {
System.out.println("\n****** Handler called! ***\n");
});
return new ArrayList<>();
}

这会默默地失败,我不明白为什么。据我所知,我完全按照文档中给出的示例进行操作。在绝望中,我启动了wire shark,根据WS,没有实际的调用(当我使用浏览器WS捕获该调用时)。所以,看来我的电话从未真正完成过。我没有得到任何异常(exception)或任何东西。将日志级别设置为调试除了

之外没有任何值得注意的地方
Failed to get SOMAXCONN from sysctl and file /proc/sys/net/core/somaxconn. Default: 128

这不应该让调用失败。我也尝试过使用 vertx.io WebClient 但也以同样的方式失败。
更新
我已经设法让它工作,但有一个警告。
正如 @tsegismont 在他的回答中指出的那样,URI 的协议(protocol)部分不应该在那里,这不在示例中,我自己只是错过了它。
我将我的示例作为独立运行,然后它就起作用了。
我最初的示例是作为 junit 测试运行的(这是测试代码的一种简单方法,我通常尝试先编写测试代码),当它作为 junit 测试运行时,它仍然不起作用。为什么会这样,我不知道。如果有人能告诉我如何让它发挥作用,我将不胜感激。

最佳答案

您使用的 getNow 变体需要服务器主机,而不是 URL。应该是:

hc.getNow(80, "sunet.se", "/",r -> {
System.out.println("\n****** Handler called! ***\n");
}

如果您在 Vert.x 文档中发现这样的代码片段,那么它就是一个错误。您介意举报吗?

现在发表一些评论。

1/HttpClient 是一个低级客户端。

大多数用户应该更喜欢 Vert.x Web Client

以下是您的用例的示例:

WebClient client = WebClient.create(vertx);

client
.get(80, "sunet.se", "/")
.send(ar -> {
if (ar.succeeded()) {
// Obtain response
HttpResponse<Buffer> response = ar.result();
System.out.println("Received response with status code" + response.statusCode());
} else {
System.out.println("Something went wrong " + ar.cause().getMessage());
}
});

2/创建单个 Vert.x 和 WebClient 实例

不要在每次方法调用时创建 Vert.x 和 WebClient 实例。浪费资源,效率低下。

关于java - Vertx.io GET 无提示失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49273538/

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