【问题标题】:Arduino Pubsubclient cleansessionflag = false not queuing messages when the device is offlineArduino Pubsubclient cleansessionflag = false 设备离线时不排队消息
【发布时间】:2017-06-11 15:18:07
【问题描述】:

我正在使用 arduino zero(samd21) 和 wifi101 模块 (atwinc1500) 以及从 @knolleary 派生的库 Imory pubsubclient 库,以与 IBM Bluemix 代理建立 MQTT 连接。

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

这是我的代码 sn-p:

 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对应t QOS 0。

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

【问题讨论】:

    标签: arduino message-queue mqtt


    【解决方案1】:

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

    pubsub 客户端可以在 QoS 0 和 1 订阅。尝试在 QoS 1 订阅

    【讨论】:

    • 嗨,我尝试使用 QOS 1,但即使在我处理命令并发送通知服务器之后,每次设备上线时我都会一次又一次地收到命令。我可以看到服务器标识该命令已在 IBM 仪表板处处理,但我仍然收到命令,我确信相同的命令正在重复,因为这些命令的申请 ID 相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多