EMQX V5 在重连后失去订阅的主题如何解决

使用.setAutomaticReconnect(true)自动重连,在重连后会失去之前订阅的所有主题,并且我已经使用了.setCleanStart(false)和固定的clientid。

听起来很奇怪,可以看看 emqx 完整的 debug 日志么

麻烦提供 emqx 的 debug 日志。日志 | EMQX文档


你应该是设置了 mqtt 不让订阅 qos2

image
这个没改啊

你用的 emqx 的详细版本号是多少?
1.看看这 3 个命令的输出是什么:
./bin/emqx_ctl conf show authentication

./bin/emqx_ctl conf show authorization

./bin/emqx_ctl conf show mqtt

  1. 试试订阅qos 为 0 的是否能正常订阅。

配置没问题。
应该是 bug,你升级到 5.8.5 应该就好了。

好的我试试

我想问下我没找到升级指南,有直接升级的命令吗还是要卸载后重新下

最好把 data 目录给删除掉。

Access denied for user 'fdrobot'@'127.0.0.1' (using password: YES)

你的 mysql 拒绝让 EMQX 连接的。

要修复这个MySQL数据库连接错误,您可以尝试以下步骤:

  1. 检查凭据
  • 确认用户名 ‘fdrobot’ 是否正确
  • 验证密码是否准确
  • 使用MySQL管理工具或命令行检查用户账户
  1. 重置或创建用户权限
-- 创建用户(如果不存在)
CREATE USER 'fdrobot'@'127.0.0.1' IDENTIFIED BY '新密码';

-- 授予必要的数据库权限
GRANT ALL PRIVILEGES ON mqtt_user.* TO 'fdrobot'@'127.0.0.1';

-- 刷新权限
FLUSH PRIVILEGES;
  1. 验证连接配置
  • 检查应用程序的数据库连接配置文件
  • 确保主机、端口、用户名和密码正确
  • 检查是否使用了正确的连接字符串
  1. 检查MySQL服务器设置
  • 确保MySQL服务正在运行
  • 检查服务器的网络和防火墙设置
  • 验证localhost和127.0.0.1的连接是否被正确配置
  1. 日志排查
  • 查看MySQL错误日志
  • 检查系统日志以获取更多详细信息

那用了5.8.5断网后还是会丢失订阅的主题这个问题有办法解决吗

建议你打开 debug 日志然后传一个完整的日志上来看看。标记说明一下是哪一条日志导致你的哪一条订阅丢弃的。我也不知道是哪里有 bug

我的程序在本机、broker在测试服务器,我尝试本机断网与broker断联后自动重连,订阅的主题就会没有。日志并没有关于该情况的记录

请提供完整的 debug 日志才能有助于分析的。
从这个上下文:我现在知道你是用的 clean start false 连接,你把session expiry interval 设置为了多少?
一般的订阅关系维护有 2 种方式。

  1. 不使用MQTT会话时,connect 时使用 clean start =true, 上线成功后自己订阅主题。重连成功后自己再次订阅主题。
  2. 使用 MQTT 会话,connect 时使用 clean start = true, session_expiry_interval=3600,这意味着如果客户端断线小于3600 秒,这断时间内的消息和订阅关系都不会丢,会在客户端重连上线时发给客户端。

所以需要在debug日志找到:第一次 connect 包使用的什么参数,重连时的 connect 又是什么参数,距离第一次 connect 的时间过去了多久。只有知道这 3 个点,就能排查出为什么订阅关系没了。
推荐你开启 emqx 的 debug 日志,耐心自己找找上面说的,应该就能找到原因的。