Vertx MQTT 客户端无法处理 CONNECTION_REFUSED_TOPIC_NAME_INVALID 异常

问题描述 投票:0回答:0

当服务器发送 CONNECTION_REFUSED_TOPIC_NAME_INVALID 时,Mqtt 客户端在堆栈跟踪中抛出 NPE 下方

[2023-04-12 08:26:07,654][vert.x-eventloop-thread-1][ERROR] ?.(:)-服务器拒绝连接 - 代码:CONNECTION_REFUSED_TOPIC_NAME_INVALID [2023-04-12 08:26:07,655][vert.x-eventloop-thread-1][ERROR] ?.(:)-未处理的异常 java.lang.NullPointerException: 空 在 io.vertx.mqtt.impl.MqttClientImpl.handleConnack(MqttClientImpl.java:1267) ~[vertx-mqtt-4.1.5.jar:4.1.5] 在 io.vertx.mqtt.impl.MqttClientImpl.handleMessage(MqttClientImpl.java:936) ~[vertx-mqtt-4.1.5.jar:4.1.5

当我尝试这个时我得到了异常 - >

客户:

mqttClient.connect(port,host, connect -> {
                if (connect.succeeded()) {
                    log.warn("connected code: {} ", connect.result().code());
                    mqttClient.subscribe(getTopicMap(), subscribeSentHandler -> {
                        if (subscribeSentHandler.failed()) {
                            log.error(" Failed to send subscription request due to ", subscribeSentHandler.cause());
                          
                        } else {
                            log.info("Successfully sent subscription request with packet ID: {} "
                                    , subscribeSentHandler.result());
                            
                        }
                    });
                } else {
                    log.error("Failed to connect to mqtt server: {}", connect.cause().getMessage());
                    
                }
            });

服务员:

endpoint.subscribeHandler(subscribe -> {
                 if(validTopic()){
                                endpoint.subscribeAcknowledge(subscribe.messageId(), grantedQosLevels);
                        } else {
                            endpoint.reject(MqttConnectReturnCode.CONNECTION_REFUSED_TOPIC_NAME_INVALID);
                        }
                        
        });

isValidTopic() 是服务器中的自定义逻辑,我正在检查客户端发送的主题是否在服务器期望的列表中。

我期待这个 NPE 应该在 MQTT 客户端中报告回上面的 subscribeSendHandler,但似乎它只被 vertx.exceptionHandler 捕获。在 exceptionHandler 全局捕获它之前,有什么方法可以捕获这个 NPE 吗?

mqtt vert.x
© www.soinside.com 2019 - 2024. All rights reserved.