消息保留功能已经开启,但客户端发消息会被断开连接,返回原因是retain_not_supported

环境

  • EMQX 版本:5.5.1
  • 操作系统版本:Ubuntu 22

重现此问题的步骤

  1. Emqx服务器已经设置了消息保留开启

  2. 客户端发消息给Emqx,会被服务器断开连接,disconnected topic会返回错误:
    {“ipaddress”:“1.X.X.X”,“disconnected_at”:1731407835520,“sockport”:1234,“proto_ver”:4,“proto_name”:“MQTT”,“connected_at”:1731407812359,“clientid”:“XXXXXXX”,“username”:“XXXXXXX”,“ts”:1731407835520,“protocol”:“mqtt”,“reason”:“retain_not_supported”}

  3. 必须客户端主动将retained设置为false才能正常发消息

这个的意思是
connect 报文不支持(禁止) retained,这个是 mqtt 规范。
你可以在 publish 报文里面加 retained

原因查明了,原来只在页面上设置消息保留并不管用,一定要在emqx.conf文件里配置:
mqtt {
retain_available = true
}
才会真的开启消息保留。
留下足迹,希望可以帮到同样踩坑的人。

1 个赞

这个应该是 dashboard 的使用问题:
其实:retain 一共有 2 个开关,要手动同时开启或者关闭,后续应该会优化一下。
你在 emqx.conf 里面配置的应该是这个:


在保留消息界面配置的是另一个开关: