开发者社区 > 云原生 > 云消息队列 > 正文

MQTT我这边遇到一个问题, 大概第4~6次调用会报错:。什么原因?

MQTT我这边遇到一个问题, 当我们的云服务比较快速(2~3次/秒)的调用mqtt发布p2p消息时, 大概第4~6次调用会报错:
org.eclipse.paho.client.mqttv3.MqttException: 客户机未连接

没有clientId重复的问题, 我们的代码也是照着SDK的demo写的. 使用的是Signature鉴权模式.

展开
收起
真的很搞笑 2023-12-10 15:25:34 304 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这个问题可能是由于MQTT客户端在快速调用时,连接没有正确建立或者断开导致的。你可以尝试以下方法解决这个问题:

    1. 增加连接超时时间。在创建MQTT客户端时,可以设置connectTimeout参数来增加连接超时时间。例如:
    MqttClient client = new MqttClient("tcp://your-mqtt-broker:1883", MqttClient.generateClientId());
    client.setConnectTimeout(30 * 1000); // 设置连接超时时间为30秒
    
    1. 使用异步回调处理连接事件。在创建MQTT客户端时,可以设置MqttCallback接口的实现类,用于处理连接、消息接收等事件。例如:
    client.setCallback(new MqttCallback() {
        @Override
        public void connectionLost(Throwable cause) {
            // 处理连接丢失事件
        }
    
        @Override
        public void messageArrived(String topic, MqttMessage message) throws Exception {
            // 处理消息到达事件
        }
    
        @Override
        public void deliveryComplete(IMqttDeliveryToken token) {
            // 处理消息发送完成事件
        }
    });
    
    1. 检查网络连接。确保你的设备和MQTT代理服务器之间的网络连接正常,没有防火墙或其他网络限制阻止通信。

    2. 重启MQTT客户端。如果问题仍然存在,尝试重启MQTT客户端,以便重新建立连接。

    2023-12-11 13:58:57
    赞同 展开评论 打赏
  • 客户端连接常见问题https://help.aliyun.com/document_detail/449235.html?spm=a2c4g.63620.0.i6
    本文介绍云消息队列 MQTT 版客户端连接服务端时的常见问题。

    2023-12-10 17:45:11
    赞同 展开评论 打赏
问答标签:
相关产品:

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载