一个账号订阅了7个topic,在某段时间内,其中一个topic的消息在emqx broker上无法发出消息,抛出cannot publish message to ****topic**** due to not authorized,其他topic消息正常接发

环境

  • EMQX 版本:emqx-4.2.11
  • 操作系统版本:CentOS 7.6.1810

重现此问题的步骤

  1. 一个账号订阅了7个topic
  2. 在某段时间内,其中一个topic的消息在emqx broker上无法发出消息,其他topic消息正常接发
  3. emqx日志查询,抛出错误:cannot publish message to (topic) due to not authorized

请检查 acl 配置


使用http acl校验,请问哪里配置不对吗?

需要看一下 http acl server 对这个特定 topic acl 请求返回的信息。

检查topic和username后会有两种返回
1.200
2.403
查看系统日志没有出现403日志,都是走的200


默认的acl配置,是不是默认ac校验失败导致的?还是什么内部bug?

请打包发下全部的日志信息。或对客户端进行 trace。
另外 4.x 已经停止支持,不会再有bug 修复和功能更新。

trace 命令文档:

emqx.log.zip (895.7 KB)

2023-12-16 18:38:09.677 [error] <<"adapter_wha3_2">>@10.79.4.158:40652 [ACL http] Request ACL path /mqtt/acl, error: {closed,
                                               "The connection was lost."}

看起来是 http 连接丢了,需要确认下 emqx 和 acl http server 之间的连接是不是正常的。

问题发生不在这个时间段

这些时间段前后的日志报错是 gun_down, closed,这个是 emqx 的 http client 组件。

  • 有两种可能

    • 请求还没发出就被断开了。
    • EMQX 还没收到回复就断开了。
  • 可以从下面两个方向看看

    • 升级到 4.4 最新版或者 5.3 (开源版 v4.4 已经停止支持,不会有功能更新和 bug 修复,5.x 还在维护中)
    • 抓包看下 http 请求有没有从 EMQX 端正常发出,有没有从你的 acl http server 回到 EMQX