新连接的客户端如何在AWS IOT中获取旧消息

时间:2018-12-13 07:58:27

标签: node.js aws-sdk mqtt aws-iot

非常简单的场景。

(主设备)在主题上发布一条消息,当前没有客户端订阅该消息。  我希望发布的邮件可以有一个自定义的到期时间。

因此说,在此有效期内,客户现在连接到该主题。 该客户将如何接收较早发布的消息?

我希望得到的答案是,如果可能的话,如果可以的话,AWS IOT提供了什么来实现这一目标。

3 个答案:

答案 0 :(得分:1)

与任何标准MQTT经纪人

您应该使用 clean_session标志设置为False 将客户端与代理连接,以便代理在此之后保持自己的状态。

请参阅:-https://www.hivemq.com/blog/mqtt-essentials-part-7-persistent-session-queuing-messages/

This document will fulfill your all queries.

注意:

根据标准MQTT规范,MQTT代理应遵循上述规则,但AWS-IoT代理不遵循此规则。

AWS-IoT消息代理不支持持久会话(将cleanSession标志设置为false进行的连接)。 AWS IoT消息代理假定所有会话均为干净会话,并且消息未跨会话存储。如果MQTT客户端在cleanSession设置为false的情况下尝试连接到AWS IoT消息代理,则该客户端将被断开连接。

可能的解决方案:

AWS-IoT使用DeviceShaddow功能提供类似于cleansession标志的功能。 AWS Device Shadows

答案 1 :(得分:1)

总体而言,@ sanket的上述答案是正确的,但有以下更改:

现在,AWS IoT支持MQTT持久性会话。请参阅以下来自AWS的相关代码段。

“持久性会话将存储订阅信息和未决的服务质量(QoS)1消息,以防设备断开连接。设备重新连接后,其持久性会话将恢复,并且其订阅将自动恢复。此外,所有存储的消息都会被传递。 “

此外,“持久会话的默认有效期为一小时。该有效期始于消息代理检测到客户端断开连接(MQTT断开连接或超时)。”

参考-How does a newly connected client get old messages in AWS IOT

答案 2 :(得分:0)

IOT 核心消息代理支持 Persistent session expiry periodBy default 与会话相关的消息将被存储 1 小时,以防会话断开:

<块引用>

消息代理存储 MQTT 持久会话的持续时间。当消息代理检测到会话已断开连接时,到期时间开始。到期时间过后,消息代理将终止会话并丢弃任何关联的排队消息。您可以使用标准限制增加流程将其调整为 1 小时到 7 天的值。