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

PAHO MQTT 5路由使用相同clientId时抛出Client not connected异常

Apache Camel集成Paho MQTT5 相同clientId连接异常解决方案

根因说明

MQTT协议明确要求同一MQTT broker上不允许同时存在两个使用相同clientId的连接。你当前在组件全局配置了固定的clientId,Camel会为生产者(to节点)、消费者(from节点)两个不同的paho-mqtt5端点分别初始化独立的MQTT客户端实例,两个实例用相同clientId发起连接时,后建立的连接会被broker强制踢掉先建立的连接,最终触发错误码为32104的Client is not connected报错。

可选解决方案

方案1:分端点配置独立clientId

取消全局clientId配置,为每个端点单独设置不同的clientId,这是你已经验证可行的方案,参考代码如下:

@ApplicationScoped
class TestRouter : RouteBuilder() {
    override fun configure() {
        val mqtt5Component = PahoMqtt5Component()
        mqtt5Component.configuration = PahoMqtt5Configuration().apply {
            brokerUrl = "tcp://192.168.99.101:1883"
            isCleanStart = true
            // 移除全局clientId配置
        }
        context.addComponent("paho-mqtt5", mqtt5Component)

        // 生产者单独配置clientId
        from("timer:test?period=1000")
            .setBody(constant("Testing timer2"))
            .to("paho-mqtt5:test?clientId=paho-producer-123")
  
        // 消费者单独配置clientId
        from("paho-mqtt5:test?clientId=paho-consumer-123")
            .process { e ->
                val body = (e.`in`?.body as? ByteArray)?.let { String(it) }
                println("test body 1 => $body")
            }
               
    }
}

方案2:开启全局共享连接

如果业务需要使用固定clientId且希望复用同一个连接,可以开启Paho MQTT5组件的共享连接配置,开启后同一Camel上下文内的所有paho-mqtt5端点会复用同一个客户端连接,不会出现clientId冲突问题:

val mqtt5Component = PahoMqtt5Component()
mqtt5Component.configuration = PahoMqtt5Configuration().apply {
    brokerUrl = "tcp://192.168.99.101:1883"
    clientId = "paho123"
    isCleanStart = true
    // 开启共享连接
    isSharedConnection = true
}
context.addComponent("paho-mqtt5", mqtt5Component)

方案3:开启自动生成clientId

如果你的业务场景不需要固定clientId,可以直接开启自动生成配置,Camel会为每个端点自动生成唯一的clientId,无需手动维护:

val mqtt5Component = PahoMqtt5Component()
mqtt5Component.configuration = PahoMqtt5Configuration().apply {
    brokerUrl = "tcp://192.168.99.101:1883"
    isCleanStart = true
    // 开启自动生成唯一clientId
    isAutoGeneratedClientId = true
}
context.addComponent("paho-mqtt5", mqtt5Component)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:27:04