简书地址:https://www.jianshu.com/p/8b0291e8ee02
qos=2 实例说明
= 例子:App发布到网关的Topic获取网关中存储的网关下设备:
步骤一: Publisher(App), app存储msg-> Publish->
broker(服务器),服务器存储msg
服务器回复app PUBREC,发布收到
app 告诉服务器 PUBREL, 发布释放
服务器回复 App , PUBCOMP,那么App在CallBack中回调
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
try {
//消息发送成功的回调
LogUtils.d(TAG, "mqtt Message 交付成功:" + new String(token.getMessage().getPayload()));
} catch (MqttException e) {
e.printStackTrace();
}
}
App 中Mqtt回调改方法,表示消息发送成功回调,服务器100%收到
App 中Delete(Msg)
-- 最终结果:消息100%传输到服务器
步骤二: *** 服务器向订阅某一个主题的网关发送数据
*** Publisher(服务器)-> 存储msg-> push到网关(Subscriber),
网关中存储store(msg),
网关回复服务器PUBREL,发布收到
服务回复网关,发布释放
网关回复服务器PUBCOMP
服务器delete(msg)
-- 最终结果:网关100%收到数据
步骤三: *** 网关收到msg以后,查询网关下数据列表
那么此时 Publisher(就是网关了) Subscriber(App), App订阅了接收数据的Topic
Publisher(网关)发送publish到服务器broker,
broker回复网关PUBREC
网关回复服务器pubrel
服务回复网关pubcomp
网关delete数据
-- 最终结果:网关数据100%发送到服务器
步骤四: *** 服务器向订阅某一个topic的app发送数据
//所有消息在这里返回
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// App接受的所有消息在这里处理
}
-- 最终结果:服务器数据100%推送到订阅到改Topic的App