【问题标题】:Receive offline messages mqtt接收离线消息mqtt
【发布时间】:2016-03-13 01:15:13
【问题描述】:

我使用 mosquitto 作为代理,使用 paho(python) 作为客户端。我正在尝试让订阅者接收离线消息。

为此我做了以下更改:

  • 固定客户端 ID
  • qos 级别 2

但是,订阅者仍然无法接收消息。

有什么帮助吗?

谢谢, 拉胡尔

【问题讨论】:

    标签: mqtt mosquitto paho


    【解决方案1】:

    为了使您的客户端成为持久客户端并在其离线时接收发送到主题的消息,您需要满足以下条件:

    1. 固定客户端 ID(如您所做的那样)
    2. 始终使用 clean_session=False 连接
    3. 订阅必须使用 QoS>0
    4. 发布的消息必须具有 QoS>0

    我最常犯的错误是忘记了第 3 点和第 4 点中的任何一个,因此我使用 QoS=0 发布或使用 QoS=0 订阅,这两种情况都会导致消息无法存储。

    您还可以查看 queue_qos0_messages 选项来告诉代理也存储 QoS=0 消息。请注意,这是一个特定于 mosquitto 的实现细节。

    【讨论】:

    • 我缺少第 2 点,解决了将 cleansession 设置为 true 的问题。谢谢。
    【解决方案2】:

    在向主题发布消息时检查是否将保留标志设置为true,如果retain=true,订阅该主题的新连接客户端将收到保留消息。

    【讨论】:

    • 这是一个关于持久订阅的队列消息而不是保留消息的问题,它们是两个非常不同的东西
    • retain 标志并不是要保留所有消息,而是要保留最后一条消息。以便订阅者在订阅特定主题时拥有发送者的最后状态
    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2021-10-15
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多