Vert.x 3.7.0 HttpRequest Методы sendForm () / sendBuffer () / sendJson () никогда не возвращаются, если хост недоступен - PullRequest
2 голосов
/ 27 июня 2019

У меня странная проблема с Vert.x 3.7.0 и 3.7.1: HttpRequest методы отправки, которые передают данные в теле запроса (sendForm(), sendJson(), sendBuffer() и т. Д. - все, кроме send()) никогда не вернется, если хост недоступен.

Следующий код никогда не вернется, если на порту 4012 нет сервера:

        HttpClientOptions options = new HttpClientOptions()
                .setDefaultHost("localhost")
                .setDefaultPort(4012);

        Vertx vertx = Vertx.vertx();
        WebClient webClient = WebClient.create(vertx, new WebClientOptions(options));

        HttpRequest<Buffer> request = webClient.request(HttpMethod.POST, "/test");

        logger.info("Sending request as sendForm()");
        request.sendForm(MultiMap.caseInsensitiveMultiMap(), event -> {
            if (event.failed()) {
                logger.error("Failed!", event.cause());
            } else {
                logger.info("Succeeded! Code {} {}", event.result().statusCode(), event.result().statusMessage());
            }
            vertx.close();
        });

Если вместо этого я использую request.send(event -> {...}), затем он печатает (как и ожидалось):

27.06.19 16:47:17,352 ERROR - Failed! io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/127.0.0.1:4012
    at java.base/sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:632)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused: no further information
    ... 11 more

Нет проблем с Vert.x до 3.7.0: я пробовал 3.6.3, и оба send() и sendForm() возвращаются с java.net.ConnectException: Connection refused: no further information.Вот почему я подозреваю, что это ошибка (в Vert.x или, может быть, в базовом io.netty), если я не делаю что-то с неопределенным поведением в моем коде.

Кто-нибудь из сообщества Vert.x здесь?:)

Заранее спасибо за любую помощь.

PS Я нахожусь на Windows 10, Java использую JVM Amazon Corretto 11.0.3.

1 Ответ

0 голосов
/ 27 июня 2019

Это случилось со мной однажды в Windows 10. Я отключил брандмауэр и перезапустил приложение Vert.x, и это сотворило магию.

...