Mqtt Paho(Java)的重連及使用


Mqtt Paho(Java)的重連及使用

此篇呢就說淺淺的說下Mqtt Paho的重連及使用.

還是一樣,咋們先看下配置項
MqttConnectionOption里的配置里有setAutomaticReconnect這個選項
它需要放入一個布爾值(Boolean)來控制開關
1.True 設定為true時,mqtt的重連機制會啟動,當mqtt client掉線之后它會進入重連.
2.False 設定為false時當然是不打開.

是否打開以上選項其實我們都需要做一個東西,就是實現mqtt的回調類MqttCallbackExtended或者MqttCallback.

這里先講一下回調類

MqttCallbackExtended是繼承了MqttCallback.他們有什么不同呢.
MqttCallback接口里面只有個3方法

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
它是在丟失重連成功后會觸發該方法

看完以上的功能,我相信小伙伴們就知道為什么需要實現回調類了,然后咋們繼續來看下他們的使用。

以下是在setAutomaticReconnect為True的時候使用的.為什么這樣說呢,因為如果不為true的情況下,它並不會觸發connectComplete(原因以后的篇章會講),上代碼

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方法,然后再實現它的子類,然后實現自己想要的重連方式就好了.

但是有個地方要注意的就是這里不是使用reconnect()方法了,而是使用connect()方法來重連.

以上就可以實現mqtt掉線重連了.
還有一個需要注意的就是,如果你在消息發送到達接收端的時候,即接收端返回信息,觸發messageArrived方法的時候不建議在方法里調用其他方法或者操作其他事情,因為這樣會導致mqtt掉線的問題,這個博主也是屢試不爽哈哈,最后找到原因,詳見鏈接(未寫)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM