【问题标题】:Receiving a PUBLISH message that contains QoS of 0 but has a Message ID接收包含 QoS 为 0 但具有消息 ID 的 PUBLISH 消息
【发布时间】:2012-08-07 18:59:38
【问题描述】:

我正在使用 MQTT 开发 M2M 应用程序(在 C# 中,虽然我看不出这有什么关系)。我已经向代理发布了一条消息,QoS 为 1,RETAIN 位为 ON。当我随后订阅该主题时(订阅为 0 的 QoS),我收到一条 PUBLISH 消息,并且标题显示它的 QoS 为 0。

我遇到的问题是主题的可变标头包含消息 ID,但我无法以编程方式知道它的存在。规范似乎表明 MessageID 仅应在设置 QoS 或 1 或 2 时出现,但传入数据包的字节 0 显然是 0x31(消息类型为 PUBLISHQoS of 0,@ 987654328@ = 1)。

现在我的解决方法是反序列化数据,如果出现异常,我会向前跳转两个字节并重试。这行得通,但对我来说确实感觉很笨拙。

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

【问题讨论】:

    标签: mqtt


    【解决方案1】:

    从你所说的情况来看,肯定有什么不对劲的地方。这不是预期的行为,也不是对规范的误解。 QoS 0 消息中不应该有消息 ID。

    您使用的是什么代理?您能否在 test.mosquitto.org:1883 上针对代理尝试您的代码,看看它的行为是否相同?同样,如果现有客户(例如来自 http://mosquitto.org/download/ 的 mosquitto_sub )有问题,那么问题不在于你。

    【讨论】:

    • 我正在使用 Eurotech 的 Everware Device Cloud 代理。闻起来像虫子。我对 MQTT 还很陌生,所以我不想这么早就扔掉错误标志。
    • 您使用的是哪个 C# 客户端库?您是否针对 test.mosquitto.org 或 m2m.eclipse.org 尝试过相同的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多