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

时间:2019-02-16 19:25:23

标签: java websocket dns vert.x

我正在建立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。

1 个答案:

答案 0 :(得分:0)

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

我有一种解决方法,您可以在此处查看:

Vertx HttpClient getNow not working

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

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