美文网首页
Mqtt Paho (Java)连接的具体使用

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

作者: kacen | 来源:发表于2019-08-07 14:30 被阅读0次

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

    其实喜欢研究代码的同学呢,会去看一下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到了吗,本文章到此结束,有什么建议的可以给我留言.

    相关文章

      网友评论

          本文标题:Mqtt Paho (Java)连接的具体使用

          本文链接:https://www.haomeiwen.com/subject/dzhodctx.html