java-8 - Vertx RxJava Webclient 客户端

标签 java-8 vert.x rx-java2

我正在尝试使用 vertx 和 rx java 使用 REST API,下面是我的代码

import io.vertx.rxjava.core.buffer.Buffer;
import io.vertx.rxjava.ext.web.client.HttpResponse;
import rx.Single;

public Single<HttpResponse<Buffer>> getLanguages() {
            WebClientOptions options = new WebClientOptions().setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.82 Safari/537.36");
            WebClient client = WebClient.create(Vertx.vertx(), options);
            Single<HttpResponse<Buffer>> single = client
                    .get("time.jsontest.com", "/")
                    .rxSend();
            return single;
        }

我在主类中的订阅者代码是

public static void main(String[] args) {
        Single<HttpResponse<Buffer>> single = new ITAPILanguagesImpl().getLanguages();
        single.subscribe(response -> {
            System.out.println("Received 1st response with status code" + response.statusCode());
        }, error -> {
            System.out.println("Something went wrong " + error.getMessage());
        });
    }

当我运行 main 方法时,出现以下错误

Jun 06, 2017 9:48:32 PM io.netty.resolver.dns.DnsNameResolver trySuccess
Something went wrong Network is unreachable: no further information: time.jsontest.com/2404:6800:4007:807:0:0:0:2013:80
WARNING: Failed to notify success (time.jsontest.com/2404:6800:4007:807:0:0:0:2013) to a promise: DefaultPromise@5dcb32d8(success: time.jsontest.com/2404:6800:4007:807:0:0:0:2013)

我检查了该网址,它工作正常,只有当我使用 vertx webclient 连接到该网址时,才会出现此错误,我错过了什么? 我已将以下工件添加为 pom 文件中的依赖项。

<dependency>
    <groupId>io.reactivex.rxjava2</groupId>
    <artifactId>rxjava</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-web-client</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-rx-java</artifactId>
    <version>3.4.1</version>
</dependency>

谢谢!

最佳答案

您的环境中似乎存在 DNS 问题。

尝试通过在命令行上添加此系统属性来切换到 JVM 内置解析器:

-Dvertx.disableDnsResolver=true

顺便说一句,在调用方法时创建 Vert.x 实例和 Web 客户端是一种不好的做法。您应该重用两者的单个实例。

关于java-8 - Vertx RxJava Webclient 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395250/

相关文章:

Java8 Lambda 与匿名类

java - 一个 java 8 流,映射并收集除第一项以外的所有项

lambda - 这个 lambda 表达式有什么作用以及如何作用

postgresql - 无法从底层数据库获取 JDBC、Vertx、Postgresql 连接

java - 如何使用 Unirest 将数据从 Vaadin 发布到 Vertx?

android - RxJava2,如何组合多观察结果?

java - 如何序列化一个lambda?

java - 如何修复 Vert.x 中的 'Request has already been read' 错误

android - MVVM - 使用 RxJava 和 Room 在 ViewModel 中处理 Disposable-s

java - RxJava : Using SubscribeOn makes the program exit without completing