接收包含QoS为0但具有消息ID的PUBLISH消息

时间:2012-08-07 18:59:38

标签: mqtt

我正在使用MQTT开发M2M应用程序(在C#中,虽然我不知道这有多重要)。我已经向代理发布了一条消息,其中QoS为1,RETAIN位为ON。当我随后订阅主题(订阅QoS为0)时,我收到一条PUBLISH消息,标题显示它的QoS为0.

我遇到的问题是该主题的变量标题包含一个消息ID,但我无法以编程方式知道它在那里。规范似乎表明MessageID只应在QoS或1或2设置时出现,但我的输入数据包的字节0显然是0x31(消息类型为PUBLISH,{{1 0,QoS = 1)。

现在我的解决方法是反序列化数据,如果我得到异常,我会向前跳两个字节并再试一次。这很有效,但对我来说确实感觉很糟糕。

这是预期的行为吗?我正在使用的经纪人有问题吗?我对规范的一些误解?

1 个答案:

答案 0 :(得分:0)

从你所说的话来看,肯定是不对的。这不是预期的行为,也不是对规范的误解。在QoS 0消息中永远不应该有消息ID。

你在使用什么经纪人?您可以在test.mosquitto.org:1883尝试针对代理的代码,看看它是否表现相同?同样,如果现有客户端(如来自http://mosquitto.org/download/的mosquitto_sub)存在问题,则不是您的错误。