Mosquitto从1.4.15变为1.5是否取消了QoS 1和2的优势?

问题描述 投票:0回答:1

我刚刚注意到从mosquitto 1.4.5到1.5的变化,retry_interval变量被删除,并给出了下面的理由。写在change_log.txt中。见github link

通过考虑何时可能发生超时,可以证明这种行为改变是合理的。

  • 如果连接不可靠并且已经丢失,但没有一端注意到,则重新连接时将重试这些消息。发送额外的PUBLISH或PUBREL不会改变任何东西。
  • 如果客户端过载/无法响应/连接速度慢,那么发送额外的PUBLISH或PUBREL将无助于客户端赶上。一旦积压清除,客户将响应。如果它无法赶上,发送额外的副本也无济于事。

删除的合理性是客户端过载而无法响应,因此无需重新发送。但根据Oasis协议的QoS 1和2定义。 mqtt-v3.1.1-os

4.4邮件传递重试

当客户端重新连接CleanSession设置为0时,客户端和服务器必须使用其原始数据包标识符重新发送任何未确认的PUBLISH数据包(其中QoS> 0)和PUBREL数据包。

我尝试阅读源代码更改,它确实删除了重试。我理解这个变化,但是它没有破坏软件的协议合规性吗?如果网络长时间停机,重试发送将无用,但如果网络故障是间歇性的,删除重试会使QoS> 0对此代理不可靠?

mqtt mosquitto
1个回答
2
投票

retry_interval选项控制在正常操作期间未确认消息的情况,即客户端似乎没有断开连接但未发送确认。

规范中讨论的消息传递重试包括客户端重新连接的情况。此行为存在于Mosquitto中,因此不会违反规范,并且将重试这些消息。

© www.soinside.com 2019 - 2024. All rights reserved.