簡體   English   中英

如何在Android上的Paho中發布保留true的mqtt消息

[英]how to publish mqtt message with retained true in paho on android

我在Android App上使用Paho Java客戶端庫。 下面提供的代碼。

MqttAndroidClient client_Panic = new MqttAndroidClient(this.getApplicationContext(), serverURL, CLIENT_ID);
    try {
        MqttConnectOptions options = new MqttConnectOptions();
        options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
        options.setCleanSession(false);
        options.setKeepAliveInterval(90);
        options.setConnectionTimeout(100);
        IMqttToken token = client_Panic.connect(options);

            //Few callbacks

       } catch (MqttException e) {
        e.printStackTrace();
    }

並在需要時發布消息

    String msg = "messages";
    MqttMessage message = new MqttMessage();
    message.setPayload(msg.getBytes());
    try {
        client_Panic.publish(topic, message);
    } catch (MqttException e) {
        e.printStackTrace();
    }

工作正常,但不完整。 我需要的是,每當其他客戶端訂閱同一主題時,都應該獲取最后一個保留的消息,該消息可能早於發布者發布。

為此,我搜索了他們的文檔,

protected void setWill(String topic,
                   MqttMessage msg,
                   int qos,
                   boolean retained)

因此,setWill根據文檔具有啟用保留選項的選項。 所以我嘗試了

        options.setConnectionTimeout(100);
        options.setWill(topic,null,2,true); // This place I added
        IMqttToken token = client_Panic.connect(options);

但是java.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWill包含options.setWill的行上, java.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWill出現錯誤java.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWill

setWill是在android上啟用retained true的正確方法嗎,如果是,那么需要提供哪些參數,否則它們是在android上啟用它的任何其他方法嗎? TIA。

遺囑是非常具體的消息,僅當客戶端與代理之間的連接不干凈(例如,網絡中斷)時才發布。

您不能將null消息設置為Will錯誤,這就是錯誤所在。

保留狀態特定於給定消息,因此您無需全局設置它,而是在每條消息上都設置它。 只需調用setRetained(boolean)將消息標記為保留

String msg = "messages";
MqttMessage message = new MqttMessage();
message.setRetained(true);
message.setPayload(msg.getBytes());
try {
    client_Panic.publish(topic, message);
} catch (MqttException e) {
    e.printStackTrace();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM