我正在使用MQTT开发M2M应用程序(在C#中,虽然我不知道这有多重要)。我已经向代理发布了一条消息,其中QoS
为1,RETAIN
位为ON。当我随后订阅主题(订阅QoS
为0)时,我收到一条PUBLISH消息,标题显示它的QoS
为0.
我遇到的问题是该主题的变量标题包含一个消息ID,但我无法以编程方式知道它在那里。规范似乎表明MessageID只应在QoS
或1或2设置时出现,但我的输入数据包的字节0显然是0x31(消息类型为PUBLISH
,{{1 0,QoS
= 1)。
现在我的解决方法是反序列化数据,如果我得到异常,我会向前跳两个字节并再试一次。这很有效,但对我来说确实感觉很糟糕。
这是预期的行为吗?我正在使用的经纪人有问题吗?我对规范的一些误解?
答案 0 :(得分:0)
从你所说的话来看,肯定是不对的。这不是预期的行为,也不是对规范的误解。在QoS 0消息中永远不应该有消息ID。
你在使用什么经纪人?您可以在test.mosquitto.org:1883尝试针对代理的代码,看看它是否表现相同?同样,如果现有客户端(如来自http://mosquitto.org/download/的mosquitto_sub)存在问题,则不是您的错误。