请问clientId是固定的好还是动态的好?

环境信息

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

问题描述

对于同一个用户,使用固定的clientId,还是使用动态的clientId?
使用动态clientId(clientId+uuid的形式),好像不能接收到保留消息。
使用固定clientId(clientId+userId的形式),可以接收到保留消息。

但是使用固定的clientId,刷新页面后,mqtt老是掉线重连。是因为之前创建的client没有清掉吗?但是刷新页面前主动调用client.end(),也是掉线。

配置文件及日志

能否接受保留消息与 Client ID 是无关的,主要看你有没有订阅那个主题。使用动态 Client ID 的问题是你没法使用持久会话了,所以具体还需要你结合自己的业务来判断,是否需要持久会话这个能力。

那为什么使用clientId+uuid的形式,收不到离线后发过来的消息?

可能的原因有很多哦,可能是你的会话过期了,可能是你的客户端连接时要求使用了全新会话。所以最好是用 EMQX 提供的 trace 命令追踪一下你的客户端产生的日志,你可以参考下这个文档:
https://www.emqx.io/docs/zh/v4.4/getting-started/log.html#日志追踪