Qos0,retained是fasle的场景下,发布的消息到emqx(broker),默认情况下,消息是保存和丢弃机制是什么?

环境信息

  • EMQX 版本:4.4.1
  • 操作系统及版本: linux centeros7
  • 其他

问题描述

条件:QOS0,retained:false(就是不保存)
1、如果不断向emqx发布不同topic消息(如压测时候),这些topic消息没有被消费,请问,这个topic有没有数量限制?(emqx_retainer插件保持默认启动,且是默认配置)
2、按照emqx_retainer插件上的默认配置:
retainer.storage_type = ram 保存内存中
retainer.max_retained_messages = 0 消息保存没有限制
retainer.max_payload_size = 1MB 消息最大1M
retainer.expiry_interval = 0 永不过期

那么按照这个配置理解,发布到emqx的消息数据都会存储到内存,并且数量不限制,直到内存撑爆为止? 不知道这样理解是否正确?
同时,文档上说,大于1M的消息不会被保存,但是可以正常使用,这个是否理解为:如果消费的客户端在线就消费,没有消费者,emqx就直接丢弃?

这里主要向知道:如果topic不断增加情况下(不爆内存前),是否会影响消息的正常收发?
因为:以前用RabbitMQ就遇到,topic太多,影响到后面的消息不能正常收、发的问题,

以上,请解答,谢谢

配置文件及日志

1.retainer是每个主题的保存的消息是最新的一条消息,而且只有一条,即使有没有消费者都会存内存。当emqx停掉后,消息也就丢失了。主题数量没有限制的。类似每个主题的最新公告,不管哪个客户端只要订阅了该主题都可以收到。
2.本身emqx就是支持大量连接,每个设备订阅的主题也是可能不一样的,基于主题路由投递消息(跟网络路由有点像)。在内存,CPU等系统资源足够前,不会影响收发。RabbitMQ本身是存储型的MQ,主题多了都是有限制的性能的。

1 个赞