当前位置: 首页 > 知识库问答 >
问题:

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

姜凯风
2023-03-14

我正在尝试通过eventbus使用SSL。为了测试失败案例,我尝试通过传递一些不同的密钥库,从同一集群中的另一个垂直站点向eventbus发送消息。

我在控制台上遇到以下异常,但它没有使replyHandler失败,因此我的代码无法检测到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秒后超时失败。地址:__vertx.reply.8419a431-d633-4ba8-a12e-c41fd5a4f37a,回复地址:ping地址

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

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

    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());
                }
            });

共有1个答案

空正豪
2023-03-14

无法捕获此异常,因为当节点未连接在一起时,Vert. x群集事件总线实现会缓冲消息。如果问题只是暂时的,可以稍后发送消息。

如果希望更早收到通知,可以在DeliveryOptions中设置较低的超时。

 类似资料:
  • 我正在为android编写一个rtp视频流,它从android本地套接字读取h264编码的数据并将其打包。问题是我做到了,但我在客户端(Voip)中不断收到黑帧。 通信方式如下:Android- 有几件事我还不明白: 1) Android的mediarecorder给了我一个原始的h264流,我怎么知道NAL何时根据该流开始/结束?它没有任何0x000001模式,但它有一个0x0000(我假设它是

  • 问题内容: 我在Java中有一个应用程序,其中我尝试确保如果有人在代码中退出代码System.exit(),则应调用侦听器来执行某些操作,例如记录消息并释放资源… 我如何实施它,欢迎任何建议/方法。 问题答案: 该方法可用于添加一个关闭钩子,该钩子基本上是未启动的,该钩子在Java虚拟机关闭时执行。 但是,这是应该谨慎对待的领域,因为它是在JVM生命周期的非常敏感的时间执行的。从API规范中获取该

  • 我正在使用Delphi XE7。我有一个Android移动应用程序,接收推送通知。有时,我有十个或更多的顶栏推送图标通知。当用户只点击一个通知图标时,我想让所有通知显示到我的应用程序中。 我执行了下一个过程来捕获所有这些消息,但不起作用,因为它只捕获单击的推送消息。 有人能帮我解决这个问题吗? 问候,路易斯

  • 问题内容: 我正在尝试捕获“ android.database.sqlite.SQLiteException:错误代码5:数据库已锁定”异常,并带有: 由于某些原因,我仍然会收到错误消息,并且LogCat中没有显示“ caught”。我尝试捕获一般的“异常”,但这仍然行不通。怎么了? 更新, 我发现了这个问题,这确实很奇怪:由于某种原因,将goto10声明的db.insert()更改为db.ins

  • 问题内容: 尽管我在日志中看到了异常,但似乎无法捕获到约束违例异常。 实体 我正试图抓住它 -它永远不会到达捕获块。 当我使用 捕获(异常e) 我捕获到“ javax.transaction.RollbackException:ARJUNA016053:无法提交事务。” 这是错误日志: 我究竟做错了什么 ? 更新>> 我当前的代码是: 日志是 环境:PostgreSQL 9.2 JBoss AS

  • 我使用的是Spring Boot 2和Spring Boot starter数据jpa以及底层的MariaDB。 我有一个带有唯一键“用户名”的表。如果违反了此约束,我想捕获,但似乎Spring正在记录并且不会在记录后重新抛出(我最好的猜测)。被抛出。 我想在中捕获。 以下是几段代码片段: 堆栈跟踪: