简体   繁体   中英

java.net.UnknownHostException: failed to resolve in Vertx

I'm establishing websocket connection, when it WS connection it is establishing, if that is WSS connection getting error.

Code:

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>

Exception:

java.net.UnknownHostException: failed to resolve 'somehost'. Exceeded max queries per resolve 4

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

Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [/xx.xxx.xxx.xxx:xx] query timed out after 5000 milliseconds (no stack trace available)

If i used System.setProperty("vertx.disableDnsResolver", "true") connection establishing but i needed with DNS.

I had a similar issue which was due to a machine remembering DNS details of a network it was no longer connected to, and trying to use those servers as the default. This was on Windows 10 / OpenJDK 11 and the stale DNS servers were hidden away in the registry, they didn't show up using ipconfig /all.

I have a workaround that you can see here:

Vertx HttpClient getNow not working

I have also raised a ticket with Netty, to suggest filtering out invalid DNS servers when they are discovering the defaults.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM