[英]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.