[英]How to publish only one message using a Java MQTT client using Eclipse Paho
[英]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.