在mqtt协议中,存在LTW(Last Will and
Testament)遗言机制,该机制只能捕捉客户端异常离线的通知,而无法获取正常通过disconnect断开连接的通知。
emqx 客户端离线通知处理 客户端上线通知
-
服务端订阅离线topic(正常非正常都会收到)即可
-
离线topic $SYS/brokers/+/clients/+/disconnected
-
上线topic $SYS/brokers/+/clients/+/connected
-
如果上下线都想收到消息 订阅这个topic $SYS/brokers/+/clients/#
-
离线会受到的topic是
$SYS/brokers/emqx@127.0.0.1/clients/xxxxx_642874/disconnected
修改etc/acl.conf 如果担心其他人非法获取离线消息,可以设置订阅权限
设置allow所有用户订阅$SYS/brokers/+/clients/#主题
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.
{allow, all, subscribe, ["$SYS/brokers/+/clients/#"]}.
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
{allow, all}.
重新加载acl文件(或者重启emqx服务)
$ ./bin/emqx_ctl acl reload
vue客户端发送遗言消息