如何在 android 上在 paho 中发布保留 true 的 mqtt 消息
how to publish mqtt message with retained true in paho on android
我正在为我的 android 应用程序使用 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);
但是在包含 options.setWill
.
的行上出现错误 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();
}
我正在为我的 android 应用程序使用 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);
但是在包含 options.setWill
.
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();
}