retainer.max_retained_messages = 1 设置不生效,重新创建连接后,始终会收到之前发过来的所有信息

环境信息

  • EMQX 版本:emqx-4.4.1-otp23.0-windows-amd64
  • 操作系统及版本:windows10
  • 其他

问题描述

retainer.max_retained_messages = 1 设置不生效,重新创建连接后,始终会收到之前发过来的所有信息

配置文件及日志

emqx_retainer.conf

emqx_auth_http.conf

emqx.conf



听你的描述看起来是:同时发了很多个消息后,才有可能导致这种行为:
因为retainer是dirty操作。你设置为1时。发完消息后,可以用以下2个命令查看一下表中有多少条数据:
./bin/emqx eval “mnesia:table_info(emqx_retainer, size).”
返回数量
./bin/emqx eval “ets:tab2list(emqx_retainer)”
返回具体内容

请问这个命令在哪执行?cmd吗?

\emqx-4.4.1-otp23.0-windows-amd64\emqx\bin>emqx eval "mnesia:table_info(emqx_retainer, size)."
Unknown command: "eval"

命令执行提示如下:
\emqx-4.4.1-otp23.0-windows-amd64\emqx>/bin/emqx eval “mnesia:table_info(emqx_retainer, size).”
系统找不到指定的路径。

请问怎么输入命令啊?

如果eval不存在,可以试试执行 \emqx-4.4.1-otp23.0-windows-amd64\emqx\bin>emqx remote_console ,在后续的shell下执行 mnesia:table_info(emqx_retainer, size).

\emqx-4.4.1-otp23.0-windows-amd64\emqx\bin>emqx remote_console
Unknown command: “remote_console”

直接执行 emqx,看看打印的命令里,可能是win下支持的命令有限,最好在linux下吧

应该是本身已经存了很多的 retained 的消息了,然后在去修改 Max Retained Messages 不会删除掉已经存储的消息

改后,重启过电脑,然后登陆后再登出,过了一阵再登陆依然能收到登出期间发过来的多条消息,这些消息还是同一个主题的。

emqx_retainer.conf 里配置的为磁盘存储的?不然就是有人在发

改为ram,然后重启emqx,依然会收到很多保留消息

终于解决了,原来emqx.conf中还有个配置zone.external.max_mqueue_len = 1000,设置为1,保留消息就只有1条了。
搞不懂retainer.max_retained_messages和zone.external.max_mqueue_len 的关系,官方能说明下吗?