java.net.UnknownHostException:无法在Vertx中解决

问题描述 投票:1回答:1

我正在建立websocket连接,当它正在建立WS连接时,如果这是WSS连接出错。

代码:

public void start() throws Exception {
  HttpClientOptions options = new HttpClientOptions();
  options.setSsl(true);
  HttpClient client = vertx.createHttpClient(options);
  MultiMap form = MultiMap.caseInsensitiveMultiMap();
  form.set("Authorization", "bearer token");
  RequestOptions options2 = new RequestOptions()
     .setHost("somehost")
     .setPort(443)
     .setSsl(true)
     .setURI("/someuri");
  client.websocket(options2, form, (ctx) ->{
    ctx.textMessageHandler( msg -> {
      System.out.println(msg);
    }).exceptionHandler((e) -> {
      e.printStackTrace();
      client.close();
    });
  }, (exec) -> {
    exec.printStackTrace();
  });
}

pom.xml:

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-core</artifactId>
  <version>3.6.3</version>
</dependency>
<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-web</artifactId>
  <version>3.6.3</version>
</dependency>

例外:

java.net.UnknownHostException:无法解析'somehost'。超过每个解析的最大查询数4

在io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:845)在io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:806)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:333)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:322)在io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:779)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:333)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:322)在io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:779)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:333)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:322)在io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:779)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:333)在io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:322)在io.netty.resolver.dns.DnsResolveContext.access $ 500(DnsResolveContext.java:62)在io.netty.resolver.dns.DnsResolveContext $ 3.operationComplete(DnsResolveContext.java:379)在io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511)在io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:504)在io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:483)在io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424)在io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:121)在io.netty.resolver.dns.DnsQueryContext.setFailure(DnsQueryContext.java:216)在io.netty.resolver.dns.DnsQueryContext.access $ 300(DnsQueryContext.java:43)在io.netty.resolver.dns.DnsQueryContext $ 4.run(DnsQueryContext.java:166)在io.netty.util.concurrent.PromiseTask $ RunnableAdapter.call(PromiseTask.java:38)在io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:127)在io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)在io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:404)在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462)处io.netty.util.concurrent.SingleThreadEventExecutor $ 5.run(SingleThreadEventExecutor.java:897)在io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)在java.lang.Thread.run(Thread.java:748)

原因:io.netty.resolver.dns.DnsNameResolverTimeoutException:[/xx.xxx.xxx.xxx:xx]查询在5000毫秒后超时(无堆栈)跟踪可用)

如果我使用System.setProperty("vertx.disableDnsResolver", "true")建立连接,但我需要DNS。

java websocket dns vert.x
1个回答
0
投票

我有一个类似的问题,这是由于计算机记住了不再连接的网络的DNS详细信息,并尝试将这些服务器用作默认服务器。这是在Windows 10 / OpenJDK 11上,过时的DNS服务器在注册表中隐藏了,它们没有使用ipconfig / all出现。

我有一个解决方法,您可以在这里看到:

Vertx HttpClient getNow not working

我还向Netty提出了建议,建议在发现无效DNS服务器时,将它们过滤掉。

https://github.com/netty/netty/issues/10264

© www.soinside.com 2019 - 2024. All rights reserved.