MQTT:持久会话消息与保留消息的优先级



假设我有主题A和主题B。在启动我的应用程序后,在on_connect中,我以QOS 2订阅了两个主题。然后我用loop_forever()开始线程。现在,假设我有关于主题B的漏发消息这些是在我不在的时候发送的,我有保留了关于主题A的消息.

订阅时,将首先处理哪些消息?

  1. 它是由于类型(即持久会话消息和保留在主题上的消息)而定义的吗?
  2. 或者on_connect中的订阅顺序是决定性的?(我不会假设线程只在loop_forever()上开始检查它们,并且可能不会假定顺序)
  3. 还是随机的?

从我的测试中,由于主题B的持久会话,我似乎错过了消息将首先被处理。
我可以信赖这种行为吗?

PS:正如hardill所提到的,行为可能是特定于代理的。我用的是mosquito.

首先你的模型有点问题,客户端不检查任何东西,消息传递完全由代理驱动。loop_forever()线程所做的就是处理来自代理的入站消息(如果需要的话,还处理对高QOS消息的响应)。

同样,如果您有一个持久会话,那么应该不需要重新订阅主题,因为订阅应该仍然附加到代理中的会话,当客户端重新连接时(使用相同的客户端ID和cleanession false),该会话将被恢复。

至于哪个消息将首先被传递,保留的或排队的消息,我认为规范实际上并没有定义代理应该发送排队消息和保留消息的顺序,这意味着它很可能是特定于代理实现的。

最新更新