假如往一个topic 发了消息qos1,但是因为某种原因,设备不再订阅或者订阅不到了,消息会积压在emqx里面吗?

问题描述

假如往一个topic 发了消息qos1,但是因为某种原因,设备不再订阅或者订阅不到了,消息会积压在emqx里面吗?
emqx 能不能自己清理过期的消息?

环境信息

  • EMQ X 版本:4.2.9
  • 操作系统及版本:ubuntu20.4
  • 其他

你好。
首先,如果 Broker 在收到消息时不存在任何相应的订阅,那么该消息会被直接丢弃。而已确认需要发送订阅者但还未发送的消息会被存储在订阅者进程的消息队列中,消息队列中的消息只会在以下三种情况下被删除:

  1. 消息队列已满,但陆续还有新消息想要入队,那么队列中最早的消息将陆续被丢弃。
  2. 订阅客户端断开连接,且会话被清除,那么队列也将被清除。
  3. 队列中的消息过期,当然前提是你使用的是 MQTT 5.0 协议,那么你可以在 PUBLISH 报文中携带一个 Message Expiry Interval 属性,用于指定消息在 Broker 端停留多久后应该被视为过期并删除。

希望以上内容可以对你有所帮助。

2赞

了解了