订阅者收到消息的时间不一致

环境信息

  • EMQX 版本:4.2.14
  • 操作系统及版本:centos7.9
  • 其他

问题描述

设备通过emqx发送topic消息,,然后A B两个订阅者去一起订阅接收,,发现A订阅这大部分总是比B订阅者接收的消息延迟700毫秒或者1秒,B订阅这一般能准时接收,,A B两个服务都是用paho 接收到消息后直接开子线程处理,也不存在消费能力问题。。。

配置文件及日志

试试打开 A 和 B 的跟踪日志看看,然后对比下里面日志详情,看能不能找到慢的原因

A B 用的都是现成的架构,可以试试,估计不太好操作,,不过初步怀疑是不是网络有问题。。。

:+1: 嗯,可以把客户端和服务器的日志都开着找找看

这个emqx publish后 订阅者是同时接收吗,还是emqx内部根据订阅者轮流publish

消息转发的代码执行肯定是顺序的,不过实际上的体感没啥差别,在 1ms 内。转发到订阅者的进程后,订阅者会根据自己当前正在排队消息依次投递,所以如果是出现了有差别,有可能是订阅者在投递的时候的产生的差别、或者客户端在接收时、or处理的产生的时差。

所以可以先搞出来日志,对比看看就应该能查到时差在哪里。然后分析就好了

排查日志发现两个订阅这获取时间不同的原因是,,emqx对每一个订阅者的send publish时间是不一样的,有的相差近800ms,,,这也就是A收到时间和B相差较大,延迟的原因,,这个emqx内部为什么会对不同的订阅者send publish时间不一致呢? 而且延迟较大。。。

那就是客户端在投递消息的时候产生了较大的时间差…看看他们的 Inflight 和 MQueue 的情况呢,是有排队么?

或者是不是外挂了其他插件 or 事件处理导致他们在投递消息到客户端的时候有时差

排队的可能不大,测试的是3台emqx集群,4台消费者订阅(共享),另一组是2台消费者订阅(共享),并发量 一般,奇怪的是emqx往外发送的日志(qos2)大部分2台消费者组比那4台消费者组块600ms(只要是延迟大部分是这样。。。),,后面改成了qos0,,,整体看还是延迟,,,应该是没定位到问题。。。