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