Mqtt Paho(Java)的重連及使用
此篇呢就說淺淺的說下Mqtt Paho的重連及使用.java
仍是同樣,咋們先看下配置項
MqttConnectionOption裏的配置裏有setAutomaticReconnect這個選項
它須要放入一個布爾值(Boolean)來控制開關
1.True 設定爲true時,mqtt的重連機制會啓動,當mqtt client掉線以後它會進入重連.
2.False 設定爲false時固然是不打開.ide
是否打開以上選項其實咱們都須要作一個東西,就是實現mqtt的回調類MqttCallbackExtended或者MqttCallback.spa
這裏先講一下回調類
MqttCallbackExtended是繼承了MqttCallback.他們有什麼不一樣呢.
MqttCallback接口裏面只有個3方法code
public interface MqttCallback { void connectionLost(Throwable var1); void messageArrived(String var1, MqttMessage var2) throws Exception; void deliveryComplete(IMqttDeliveryToken var1); }
connectionLost是在鏈接已經連上且丟失後走這裏
messageArrived這個是消息發送到接收端時觸發
deliveryComplete這個是發送完成繼承
MqttCallbackExtended接口
public interface MqttCallbackExtended extends MqttCallback { void connectComplete(boolean var1, String var2); }
它的話是多出了一個方法connectComplete
它是在丟失重連成功後會觸發該方法get
看完以上的功能,我相信小夥伴們就知道爲何須要實現回調類了,而後咋們繼續來看下他們的使用。
如下是在setAutomaticReconnect爲True的時候使用的.爲何這樣說呢,由於若是不爲true的狀況下,它並不會觸發connectComplete(緣由之後的篇章會講),上代碼qt
MqttClient client = new MqttClient; ...... client.setCallback(new MqttCallbackExtended() { @Override public void connectComplete(boolean b, String s) { System.out.println("丟失重連成功"); } @Override public void connectionLost(Throwable throwable) { log.error("connect lost"); int i = 3; while (true) { if (i < 0) { //這裏是我本身爲了失敗3次後告警使用 WarmingUtil.getwarming("2", "mqtt丟失問題"); break; } if (!client.isConnected()) { System.out.println("***** client to connect *****"); try { //這個是30秒後重連 Thread.sleep(30000); client.reconnect(); } catch (Exception e) { e.printStackTrace(); continue; } i--; } if (client.isConnected()) { System.out.println("***** connect success *****"); break; } } } @Override public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { } }); ......
若是爲false就new 一個MqttCallback方法,而後再實現它的子類,而後實現本身想要的重連方式就行了.io
可是有個地方要注意的就是這裏不是使用reconnect()方法了,而是使用connect()方法來重連.class
以上就能夠實現mqtt掉線重連了.還有一個須要注意的就是,若是你在消息發送到達接收端的時候,即接收端返回信息,觸發messageArrived方法的時候不建議在方法裏調用其餘方法或者操做其餘事情,由於這樣會致使mqtt掉線的問題,這個博主也是屢試不爽哈哈,最後找到緣由,詳見連接(未寫)