2017-06-11 133 views
0

我使用arduino zero(samd21)将wifi101模块(atwinc1500)与Imory pubsubclient库从@knolleary分叉,以便与IBM Bluemix broker进行MQTT连接。Arduino Pubsubclient cleansessionflag = false当设备处于脱机状态时不排队消息

我能够成功发布和订阅邮件,但是,我需要将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

然而,我的设备没有接收到按预期排队的命令。我错过了什么?

回答

0

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

PubSub的客户端可以在服务质量订阅0 & 1.尝试在订阅的QoS 1

+0

嗨,我尝试使用QOS 1,但我一直一次又一次,每次的设备联机即使我处理命令得到命令并发送通知服务器。我可以看到服务器识别命令已在IBM仪表板处理过,但我仍然得到这些命令,我​​确定相同的命令正在重复执行,因为请求ID与命令相同。 – sudheera8

相关问题