非常简单的场景。
(主设备)在主题上发布一条消息,当前没有客户端订阅该消息。 我希望发布的邮件可以有一个自定义的到期时间。
因此说,在此有效期内,客户现在连接到该主题。 该客户将如何接收较早发布的消息?
我希望得到的答案是,如果可能的话,如果可以的话,AWS IOT提供了什么来实现这一目标。
答案 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 period。 By default 与会话相关的消息将被存储 1 小时,以防会话断开:
<块引用>消息代理存储 MQTT 持久会话的持续时间。当消息代理检测到会话已断开连接时,到期时间开始。到期时间过后,消息代理将终止会话并丢弃任何关联的排队消息。您可以使用标准限制增加流程将其调整为 1 小时到 7 天的值。