MQTT无法接收到部分消息

一个MQTT服务器,订阅了通配符,通配符代表了100多台设备,一天可能有大概10台左右设备发消息,消息种类有“1”,“2”,”3“。。。这几种类型的消息,其中消息1类型频率每秒一条,然后我在这个频率里,穿插发2或者3,全部都是等级0,我用PC电脑MQTTX软件监控主题,发现不存在数据收不到现象,但是我的服务器,订阅了通配符的,就是会出现偶尔收不到消息,甚至2种类和3种类连发好几条都收不到的现象(服务器log打印),这种是什么原因?是本身等级0的消息就是会丢吗?那这丢的频率是不是太高了?还是说我这个主题承载量已经极限了?我的种类2和3的消息需要另发一个主题?还是说要我换成等级1和2去发送?那么开源的EMQX我看不支持等级1和2的队列消息,我只能用企业版吗?跪求技术大佬,解决!很急!

从你的简单描述来看,混着发 1,2,3 都是没有问题的。
如果丢了消息,一定会在 emqx 的日志里面说明原因的。
麻烦上传一下 emqx 的日志。

emqx.log.zip (1.1 MB)
你看下,而且emqx客户端一直告警这个:connection congested: #{buffer => 4096,clientid => <<“client_php_traction0001”>>,conn_state => connected,connected_at => 1734325763948,high_msgq_watermark => 8192,high_watermark => 1048576,memory => 1115464,message_queue_len => 0,peername => <<“8.137.71.57:36318”>>,pid => <<“<0.1991.24>”>>,proto_name => <<“MQTT”>>,proto_ver => 4,recbuf => 369280,recv_cnt => 2,recv_oct => 166,reductions => 299384,send_cnt => 366,send_oct => 209518,send_pend => 405,sndbuf => 87040,sockname => <<“192.168.1.1:1883”>>,socktype => tcp,username => <<“zhinoa”>>}

emqx.log.zip (1.1 MB)

现在我发等级0的消息,除了一秒一次那个频率种类的消息可以收到,其他的频率稍微低一点的,压根收不到

里面全是 drop,说明你订阅端的消费能力太差了。消费不了,短时间处理不了这么多消息。
优化的方向就是调整订阅端代码想办法用多线程处理(单个订阅端处理能力变快),或者使用共享订阅(多个订阅端共同分担)来做。
但是你说了你想订阅#,所以不好用共享订阅

其次的建议是:

  1. 任何时间不要让一个客户端订阅#,这样100个客户端能处理过来,以后业务来了,简单翻个倍就处理不了。
  2. 想办法分组,让一个发布端对应10个订阅端。用固定的topic来实现。
  3. 不用mqtt订阅来消费。直接使用webhook。把所有的消息用规则引擎转发到你的http server上,http connector上面支持配置连接池。


emqx日志一直ba报这个0024设备消息被丢弃 可以怎么手动处理一下吗

还有个疑问,那么如果我所有的种类消息都是qos0的消息,100台设备发一个客户端接收也会有消耗能力吗,还是这个消耗能力只针对qos1和qos2呢?