Mqtt Paho (Java)连接的具体使用

2019-08-07  本文已影响0人  kacen

看过入门篇的小伙伴是不是想着一个问题,就是连接失败的时候咋们还需要做重连,不然就无法保证服务器的高可用问题.

其实喜欢研究代码的同学呢,会去看一下mqtt的源码.其实connnect的方法其实有多个重载方法.以下代码是我们今天要看的.

public class MqttAsyncClient implements IMqttAsyncClient {

......

public IMqttToken connect(MqttConnectOptions options) throws MqttException, MqttSecurityException {
        return this.connect(options, (Object)null, (IMqttActionListener)null);
    }
......

}

细心的同学可能发现了,connect的第三个参数里边有个参数是IMqttActionListener
这一个方法呢是监听连接状态的,在connect时会触发,所以我们可以实现该类

public interface IMqttActionListener {
    void onSuccess(IMqttToken var1);

    void onFailure(IMqttToken var1, Throwable var2);
}

它有一个onSuccess和onFailure方法,
onSuccess方法在连接成功时触发,onFailure会在连接失败时触发.
我们的话可以在里边写自己想要的内容.例如成功时候订阅,还有失败时候的重连

private IMqttActionListener iMqttActionListener = new IMqttActionListener() {
        @Override
        public void onSuccess(IMqttToken iMqttToken) {
            log.info("success to connnect.");
            //这里的topics可以直接在imqttToken获取或者,和qos一样在配置获取
            client.subscribe(topics,qos);
        }

        @Override
        public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
            log.error("fail to connnect,try again");
            int count = 2;
            do {
                try {
                    count--;
                    if (count<0){
                        WarmingUtil.getwarming("2", "mqtt连接出现问题");
                        break;
                    }
                    Thread.sleep(1000);
                    client.connect(conOpt,null,iMqttActionListener);
                } catch (MqttException e) {
                    e.printStackTrace();
                    log.error("mqtt重连失败");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } while (!client.isConnected());
        }
    };

以上方法连接的方法get到了吗,本文章到此结束,有什么建议的可以给我留言.

上一篇下一篇

猜你喜欢

热点阅读