MQTT 消息达到排队或飞行限制,是否在某处说明它是最旧的消息被丢弃?

物联网 MQTT 帕霍
2021-06-28 07:29:19

我正在 Python 中学习 MQTT 以及 QOS = 1 和 2 的协议。我担心我的 Raspberry Pi 陷入困境,或者服务器上是否存在其他意外问题。我可以看到排队和飞行中的消息有限制,如下所示。

到目前为止,如果这些队列达到它们的任何一个限制,我还无法阅读或理解我最新发布的消息会发生什么。我猜最新的消息会得到最好的处理,当达到限制时,最旧的消息会被删除,但我找不到明确说明的内容。

这真的会发生吗?

“奖励积分:”有没有办法了解哪些消息 ID 仍然保留在队列中?


import paho.mqtt.client as mqtt
client = mqtt.Client("I am your client")

阅读有关 qos 1 和 2 的 help(client.max_queued_messages_set)收益

设置传出消息队列中的最大消息数。0 表示无限制。

help(client.max_inflight_messages_set) 产量

设置 QoS>0 的最大消息数,这些消息可以同时通过其网络流。默认为 20。

1个回答

该处理的代码max_queued_messages在这里

if self._max_queued_messages > 0 and len(self._out_messages) >= self._max_queued_messages:
    message.info.rc = MQTT_ERR_QUEUE_SIZE
    return message.info

看起来它不会将任何消息从队列中弹出,如果您仍想保留它,则由您来处理存储此新消息。

对于该代码max_inflight_messages在这里

如果当前传输中的消息过多,这会将消息排入队列。

由于消息队列测试首先完成,如果达到飞行限制,则总是有空间将新消息排队。