You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HiveMQ Java客户端自动重连未携带用户名密码导致Mosquitto认证失败问询

问题根因

当前认证参数配置在单次connectWith()调用中,仅对首次连接生效,HiveMQ客户端自动重连逻辑不会复用单次连接请求的参数,导致重连时未携带用户名密码触发鉴权失败。

修复方案

将simpleAuth认证配置移到MQTT客户端全局Builder初始化阶段,全局配置会被自动重连逻辑复用,修改后代码如下:

val mqttClient = MqttClient.builder().useMqttVersion5()
    .identifier(UUID.randomUUID().toString())
    .serverHost("10.0.2.2")
    .serverPort(1883)
    .automaticReconnectWithDefaultConfig()
    // 全局配置认证信息,自动重连时会自动携带
    .simpleAuth()
        .username("guest")
        .password("guest".toByteArray())
        .applySimpleAuth()
    .addConnectedListener {
        Log.d("MqttHelper", "addConnectedListener => $it")
    }
    .addDisconnectedListener {
        Log.d("MqttHelper", "addDisconnectedListener => ${it.cause}")
    }
    .buildAsync()

// 首次连接无需重复配置认证参数
mqttClient.connectWith().send()
    .whenComplete { connAck, throwable ->
        if (throwable != null) {
            Log.e("MqttHelper", "connect error", throwable)
            // handle failure
        } else {
            Log.d("MqttHelper", "Connected successfully => connAck: $connAck")
        }
    }

验证说明

  • 首次连接成功后断开网络,待网络恢复时可通过客户端日志确认重连是否成功
  • 如有需要可在Mosquitto broker侧查看连接日志,确认重连请求是否携带用户名密码参数

内容的提问来源于stack exchange,提问作者AR Soft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:00:04