我正在建立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.runAllTasks(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。
我有一个类似的问题,这是由于计算机记住了不再连接的网络的DNS详细信息,并尝试将这些服务器用作默认服务器。这是在Windows 10 / OpenJDK 11上,过时的DNS服务器在注册表中隐藏了,它们没有使用ipconfig / all出现。
我有一个解决方法,您可以在这里看到:
Vertx HttpClient getNow not working
我还向Netty提出了建议,建议在发现无效DNS服务器时,将它们过滤掉。