【问题标题】:When does paho mqtt client drop buffered message?paho mqtt 客户端何时丢弃缓冲消息?
【发布时间】:2020-04-02 06:38:48
【问题描述】:

我正在使用基于 Python 的 paho mqtt 客户端将数据发布到 mosquitto mqtt 代理。

让我们假设一个场景,当客户端想要发布消息并且代理断开连接。

因此,基于 python 的客户端对象在 _out_message(有序字典)中缓冲该消息,并不断重试发送消息。

我想知道,

  • mqtt 客户端会缓冲多长时间?
  • 是否有任何时间限制或重试限制,超过此时间客户端将丢弃消息。

我想转储/记录此类消息。

【问题讨论】:

  • 你试过看源代码吗?
  • 我已经完成了一定程度的代码演练,但在删除缓冲消息方面没有任何线索?这就是我发布这个问题的原因?
  • @barny,如果您对此有任何信息,请分享您的知识或请指导我访问正确的论坛/地点
  • 我的知识水平和你完全一样。源似乎显示:a)out_messages 队列仅用于 qos 1,2; b) 未确认消息的重试没有明显的过期时间。但请随时自行检查。对于您使用客户端正确处理 on_disconnect() 回调和发布调用返回的值很重要,因为队列绝不是无限的。

标签: python mqtt paho


【解决方案1】:

根据Eclipse Paho Python documentation,可以设置服务质量大于0(QoS>0)的最大外发消息数,可以在外发消息队列中挂起,方法如下:

max_queued_messages_set(self, queue_size)

似乎使用默认值 (0),所有消息都将保留,直到 MQTT 客户端能够发送它们。所以,最后,我认为消息会一直保留到 Python 进程达到操作系统强加的内存限制。

您可以使用 reinitialise 方法强制 MQTT 客户端丢弃消息。

reinitialise(client_id="", clean_session=True, userdata=None)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2018-03-17
    • 2016-10-27
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多