

<aside> 💡
Mqtt特性
所有Client都必须有Client Name或Client Id。同名客户端尝试连接则导致现有客户端连接将被断开。由于大多数 MQTT 客户端会在断开连接后尝试重新连接,这可能会导致断开和连接的循环。
MQTT 客户端会定期(通常为 60 秒)发布保持活动消息,告知代理客户端仍处于连接状态。
当连接异常中断时,发布者会告知代理使用遗嘱消息通知主题的所有订阅者。
// 创建MQTT客户端
MqttClient mqttClient = new MqttAsyncClient(
config.getBrokerUrl(),
config.getClientId(),
new MemoryPersistence()
);
MqttConnectOptions options = new MqttConnectOptions();
options.setWill(
config.getWillTopic(),
config.getWillMessage().getBytes(),
config.getWillQos(),
config.isWillRetained()
);
mqttClient.connect(options);
/**
* 订阅某个主题
* qos 服务质量
*/
public void subscribe(String topic, int qos) {
try {
MQTTClient.getClient().subscribe(topic, qos);
} catch (MqttException e) {
log.error("订阅异常",e);
}
}
干净会话是指代理在断开连接时不需要记住有关客户端的任何信息。反之代理将记住客户端订阅,并可能为客户端保留未送达的消息。
取决于订阅主题时所使用的服务质量,
以及发布到主题时所使用的服务质量。