5.1.1版本emqx 运行一段时间后,通配符+方式只收到保留消息的数据,但新的数据使用+号收不到

5.1.1版本emqx
centos7 环境
在使用过程中,后面发面使用通配符+只能收到保留消息,对于非保留消息没法接收。一开始使用是正常的,但中间操作的东西太多,我把部分集群节点去除等等操作。不知哪一步影响到emqx,使用mqttx工具订阅 如 aa/+,只能收到保留数据,把+号换成#号确能收到数据,请问是什么原因?

  • 先收集一下日志信息
    1. 用命令 ./bin/emqx remote_console 进入 emqx 控制台
    2. 执行 rp(ets:tab2list(emqx_trie)). 函数,并贴一下结果。
    3. 使用 Ctrl+g ,并按 q 然后回车来退出 emqx 控制台

我发现好像是针对主题的,有些主题用工具使用+号可以,有些主题确不行。
比如目前用/sys/932e4a47e5414e058fdbd067a4942247/device/test1/thing/property/+ 这个是可以的。但用scada/backService/AutoCheck/Result/+ 确收不到数据,如上截图结果是收到不到


我用日志追踪功能也只看到有推送,但日志跟进到是有订阅到这个主题的。

客户端试一下同时订阅这两个主题
scada/backService/AutoCheck/Result/+scada/backService/AutoCheck/Result/#

然后把函数 rp(ets:tab2list(emqx_trie)). 的输出写个 txt 文件,整个上传下,截图里面与 scada 主题相关的信息滚动到上面去了看不到。

还有就是从第一个节点启动那一刻,到目前为止,所有节点的所有日志都打包一份发下。包括扩缩集群过程中关闭的,离开集群的所有节点

scada/backService/AutoCheck/Result/# 这个可以收到,只是scada/backService/AutoCheck/Result/+收不到,另外 执行 rp(ets:tab2list(emqx_trie)). 函数根本没找到有这个scada/backService/AutoCheck/Result主题关健字的信息。 另外由于缩减的集群的节点的服务已清空了,没法提供出来。只能针对已有的2个节点信息。从我以上提供的截图以及trace 日志能看得出来是否哪里的BUG吗?

目前只有xxx.xxx.xxx.214,xxx.xxx.xxx.215组成集群,之前的IP的数据已移除了集群,但这里还看到这些垃圾数据。如何可以清理这种垃圾数据呢?我想清理后看问题是否能解决。

需要在客户端正在订阅这两个主题时执行

我就是在客户端订阅并推送后,再执行rp(ets:tab2list(emqx_trie)). 执行完后我把数据弄出来,根本没发现有这个订阅信息。但后台是看到有订阅的


并且发现emqx把消息失弃了


scada/backService/AutoCheck/Result/# 有,但scada/backService/AutoCheck/Result/+没有

这个问题影响较大,项目没法进行下去,希望支持一下,帮定位是BUG还是哪里配置问题,谢谢!

麻烦把 EMQX 所有现存的日志文件打包发一下。
另外 emqx_trie 函数的执行结果也请复制到文件中打包上传下。

问题分析/问题复现/给出问题恢复方案 都非常依赖这些信息。

请查收

目前可以在 10.16.115.214 这个节点的 remote_console 中执行函数:

 emqx_router:do_add_route(<<"scada/backService/AutoCheck/Result/+">>).

然后观察 emqx_trie 表中有没有 scada 这个主题相关的信息
另外在每次客户端 订阅/取消订阅 + 通配符的主题后,都观察一下 emqx_trie 表中的数据,确保emqx_trie 表中的信息一致,没有丢失

此外注意到了你的另一篇帖子:5.1.1版本的emqx集群某个节点异常后不会自动恢复
当前的情况有极可能是集群过程中的错误所导致的,可以新找一个干净的环境(新的 docker network/新的虚拟机)重新部署验证。

emqx_router:do_add_route(<<“scada/backService/AutoCheck/Result/+”>>). 执行这个方法后,我在emqx_trie 也没找到scada/backService/AutoCheck/Result/+ 这个主题;目前只能找一个干净的环境试咯

但我有个疑问,关于 另一篇帖子:5.1.1版本的emqx集群某个节点异常后不会自动恢复,我节点名称写错了,为什么还能加入到集群呢?正常不应该报错并加入集群失败才对呢?

我在另个一个新的环境,今天发生脑列后自动恢复又出来这个问题了。而且我目前用的版本是5.0.17,现在变成反过来了,scada/backService/AutoCheck/Result/#订阅不到,用scada/backService/AutoCheck/Result/+ 可以订阅。有什么什么解决办法呢?
emqx_router:do_add_route(<<“scada/backService/AutoCheck/Result/#”>>). 通过这个函数也没法同步到emqx_trie 表里去。

你好。请问有没有客户端使用 $share 前缀订阅 scada/backService/AutoCheck/Result/# 或者 scada/backService/AutoCheck/Result/+

没有客户端使用共享订阅这两个主题的;

你好。
请问有改过 broker.perf.route_lock_type 这个配置码?