我正在使用 MQTT 开发 M2M 应用程序(在 C# 中,虽然我看不出这有什么关系)。我已经向代理发布了一条消息,其中 aQoS
为 1 且RETAIN
位为 ON。当我随后订阅该主题(订阅QoS
为 0)时,我收到一条 PUBLISH 消息,并且标题显示它的 aQoS
为 0。
我遇到的问题是该主题的可变标头包含一个消息 ID,但我无法以编程方式知道它的存在。规范似乎表明 MessageID 仅应在QoS
设置 a 或 1 或 2 时出现,但传入数据包的字节 0 显然是 0x31(消息类型为0,PUBLISH
= 1)。QoS
RETAIN
现在我的解决方法是反序列化数据,如果出现异常,我会向前跳两个字节并重试。这行得通,但对我来说确实感觉很笨拙。
这是预期的行为吗?我正在使用的经纪人有问题吗?对我的规范有一些误解?