MQTT-Eclipse paho mqtt重连机制

MQTT-Eclipse paho mqtt重连机制

代码样例

import org.eclipse.paho.client.mqttv3.*;

public class ConnectMQTT {

    public void connectMQtt() throws MqttException {
        MqttConnectOptions options = new MqttConnectOptions();
        //心跳时间限定为30至1200秒
        options.setKeepAliveInterval(120);
        options.setConnectionTimeout(5000);
        options.setAutomaticReconnect(true);
        options.setUserName("username");
        options.setPassword("password".toCharArray());
        /*
        设置重连
         */
        options.setAutomaticReconnect(true);
        IMqttClient client = new MqttClient("url", "clientId");
        client.setCallback(callback);
        // 建立连接
        client.connect(options);
    }

    private static MqttCallback callback = new MqttCallbackExtended() {
        /**
         * 连接成功回调-可以在重新连接成功时,重新订阅topic
         * @param reconnect
         * @param serverURI
         */
        @Override
        public void connectComplete(boolean reconnect, String serverURI) {
            System.out.println("Mqtt client connected. address:" + serverURI);
        }

        @Override
        public void connectionLost(Throwable cause) {
            cause.printStackTrace();
            System.out.println("Connection lost.");
        }

        /**
         * 接受消息处理
         * @param topic
         * @param message
         * @throws Exception
         */
        @Override
        public void messageArrived(String topic, MqttMessage message) throws Exception {
            System.out.println("Receive mqtt topic:" + topic + ", message:" + message);
        }

        @Override
        public void deliveryComplete(IMqttDeliveryToken token) {
            System.out.println("Mqtt message deliver complete.");
        }
    };

}

代码解析

设置重连

需要设置automaticReconnect为true,默认是不支持重连机制的,当设置为true时,当连接断开时,会进行重新。客户端将尝试重新连接到服务器。它一开始会等待1秒它尝试重新连接,对于每一次失败的重新连接尝试,延迟将加倍直到它在2分钟,此时延迟将停留在2分钟

/*
设置重连
 */
options.setAutomaticReconnect(true);

问题说明

1、在开发时设置automaticReconnect未true,重新连接成功后,会丢失订阅相关信息。
原因:因cleanSession参数默认为true,在重连成功后,会丢失订阅消息。
修改:可以将cleanSession参数设置为false,也可以在重连成功后重新订阅topic

我则是在重连成功时重新订阅topic。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值