Arduino Pubsubclient cleansessionflag = false当设备离线时不排队消息

时间:2017-06-11 15:18:07

标签: arduino message-queue mqtt

我正在使用带有wifi101模块(atwinc1500)的arduino zero(samd21)和来自@knolleary的库Imory pubsubclient库与IBM Bluemix代理进行MQTT连接。

我能够成功发布和订阅消息,但是,我需要对IOTF命令进行排队,以便在离线时接收发送到我设备的命令。我知道当设备离线时,连接到故障排队时,应该取消设置cleansession标志。

这是我的代码段:

 while(!Org_Client.connected())
         {
              SerialUSB.println("Connecting to MQTT server");
                if (Org_Client.connect(MQTT::Connect(Org_ClientID).unset_clean_session().set_auth(authMethod,token)))
                {
                    SerialUSB.println("Connected to MQTT server");
                  Org_Client.subscribe(MQTT::Subscribe().add_topic(subtopic1,0));
                   Org_Client.subscribe(MQTT::Subscribe().add_topic(subtopic2,0));
                   Org_Client.subscribe(MQTT::Subscribe().add_topic(subtopic3,0));
                   Org_Client.subscribe(MQTT::Subscribe().add_topic(subtopic4,0));

}
}

// subtopic1,subtopic2,subtopic3,subtopic4是我的订阅主题,0对应于QOS 0。

但是,我的设备未按预期接收排队命令。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

订阅QoS 0的消息不会排队,因为代理会在发布时尝试发送然后将其丢弃。

pubsub客户端可以订阅QoS 0& 1.尝试订阅QoS 1