MQTT消息队列可否有多个?

环境信息

  • EMQX 版本:4.4.1开源版

问题描述

emqx的消息队列只有一个吗?可否设置多个消息队列?为了防止一个客户端出现故障,不停的发送消息将队列阻塞的情况出现,想要在emqx broker指定每一个客户端的最大消息缓存/接收数量,或者将队列隔离,每个客户端使用一个长度较小的消息队列。上述的两种方式可以实现吗?

消息队列都是基于订阅者的,即,每个订阅者一个消息队列,它就是多个的,该队列存储的是需要投递给客户端的消息。


那这里的配置项也是针对单个客户端而言的吗?
external和internal是什么意思呀?
共享订阅的订阅者是共用一个消息队列的吗?

  1. 是的是针对每个客户端的。

  2. externalinternal 是另外的一个概念。emqx 的默认配置中,开放了两类 MQTT 的监听端口,允许外部网络接入的listener.tcp.external = 0.0.0.0:1883 和 只允许内部/局域网络接入的: listener.tcp.internal = 127.0.0.1:11883 (当然这里只是一个默认配置,一般来说这里会配置为你机器的内网网卡的 IP,例如 192.168.1.2)。

    这里的 external, 和 internal 则指的是 emqx 提供的这两组分别基于内外网的配置组,参考:https://www.emqx.io/docs/zh/v4.4/getting-started/config.html#zone-listener

    所以这里的 external 和 internal 指的是在不同的配置组里面,有不一样的 max_inflight 的默认值 (因为,我们认为用于内网的 MQTT 连接,是比用于外网的 MQTT 连接 有跟高的吞吐要求)

  3. 仍然是每个订阅者都有自己的队列