如何通过java vert.x Eventbus发送消息时捕获/捕获“ javax.net.ssl.SSLHandshakeException:无法创建SSL连接”。

问题描述 投票:1回答:1
我正在尝试通过事件总线使用SSL。为了测试失败情况,我尝试通过传递一些不同的密钥库,从同一集群中的另一个垂直节点向eventbus发送消息。

我在控制台上遇到异常,但是没有使repeatHandler失败,因此我的代码无法检测到SSL异常。

我的代码:

eb.request("ping-address", "ping!", new DeliveryOptions(), reply -> { try { if (reply.succeeded()) { System.out.println("Received reply " + reply.result().body()); } else { System.out.println("An exception " + reply.cause().getMessage()); } } catch (Exception e) { System.out.println("An error occured" + e.getCause()); } });

控制台异常:

**javax.net.ssl.SSLHandshakeException: Failed to create SSL connection** at io.vertx.core.net.impl.ChannelProvider$1.userEventTriggered(ChannelProvider.java:109) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:341) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:327) at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:319) at io.netty.handler.ssl.SslHandler.handleUnwrapThrowable(SslHandler.java:1249) at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1230) at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1271) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:505) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:444) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:283) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514) at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:813) Caused by: javax.net.ssl.SSLException: Received fatal alert: bad_certificate at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1647) at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1615) at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1781) at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1070) at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:896) at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:766) at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624) at io.netty.handler.ssl.SslHandler$SslEngineType$3.unwrap(SslHandler.java:282) at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1329) at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1224) ... 20 more

但是处理程序在30秒后超时失败。等待30000(ms)答复后超时。地址:__vertx.reply.8419a431-d633-4ba8-a12e-c41fd5a4f37a,已回复地址:ping-address

我想立即捕获SSL异常并进行处理。请指导我如何捕获/捕获此异常。

我尝试使用以下代码。下面的一个能够处理异常,并且我没有从所谓的事件总线得到答复结果。回复结果始终为空。 (值始终为null)

MessageProducer<Object> ms = eb.sender("ping-address"); ms.write("ping!", reply -> { if (reply.succeeded()) { reply.map(value -> { System.out.println("Received reply " + value); return reply; }); } else { System.out.println("No reply"); System.out.println("An exception : " + reply.cause().getMessage()); } });

我正在尝试通过事件总线使用SSL。为了测试失败情况,我尝试通过传递一些不同的密钥库,将消息从同一集群中的另一个垂直节点发送到事件总线。我正在下面...
vert.x sslhandshakeexception
1个回答
0
投票
您无法捕获此异常,因为当节点未连接在一起时,Vert.x群集的EventBus实现会缓冲消息。如果问题只是暂时的,则可以稍后发送该消息。
© www.soinside.com 2019 - 2024. All rights reserved.