EMQX服务器重启后频繁报MQTTException: Could not connect: CONNECTION_REFUSED_NOT_AUTHORIZED错误

环境

  • EMQX 版本:EMQX 4.3.3
  • 操作系统版本:

预期行为

实际行为

使用了emqx_auth_mnesia插件来进行授权认证,在与EMQX成功建立连接后,如果EMQX服务器重启,客户端在尝试重连的时候,一分钟内报了上万次的MQTTException: Could not connect: CONNECTION_REFUSED_NOT_AUTHORIZED错误,但是程序里会判断connect的connected状态,如果为false的话会另外处理。所以上述一分钟上万次的错误是否是因为存在成功建立了连接但却没有获得授权的情况?

  • could_not_connect:
    请看常见问题解答:常见问题汇总
  • CONNECTION_REFUSED_NOT_AUTHORIZED 是指客户端认证没有通过
    • username/password 不正确
    • 认证后端没有启用/连接失败/请求失败/…
  • username/password都是正确的,并且后端也启用认证了,因为第一次建立连接的时候是成功的,上面这种情况是在EMQX服务器重启之后在重连的时候产生的。
  • 在执行这段产生异常的代码之前会判断connect.isConnected()的值,如果是false的话会一直等待重连,只有connect.isConnected()==true的时候,才会往下执行,说明在执行这段代码的时候连接已经建立了,不知道为什么还会频繁抛出这个异常,我在尝试复现的时候,如果EMQX服务器重启的话会报一次这个错误,之后就重连成功了,但是没有复现出来上次碰到的这种一分钟报40000次的这个错误,不知道这可能是什么原因导致的呢

有可能是在 EMQX 启动还没有完全完成的时候(内部还有组件没有启动),客户端就已经发起连接,导致了客户端无法通过认证。