EMQX 是否可以将ClientID的部分字符串或username来持久会话

环境信息

  • EMQX 版本:
  • 操作系统及版本:
  • 其他

问题描述

因4G模块连接ClientID带了时间戳,导致每次重新上线都是不同的ClientID,无法使用持久会话。
是否可以将ClientID的部分字符串或使用username来持久会话

比如

ClientId:
emqx_is_the_best|securemode=3,signmethod=hmacsha1,timestamp=1657701567000|

emqx_is_the_best 作为客户端唯一标识,如果可以实现有什么实现办法,改动大不大。

配置文件及日志

目前不可以,我们没有支持这种用法,MQTT协议设计中 clientid 是用作设备标识的。你是想做什么业务呢?如果是想做订阅,可以看下代理订阅的文档,是否能代替。
如果一定要持久化离线消息,并且按照设备的其他信息作标识符,目前只能联系EMQX的商务做定制开发,如果你需要商务的联系方式,可以私信我获取。

起因是我们用的4G模组是对接阿里云IoT,阿里云IoT是用设备三元组作为设备的唯一标识,即使ClientId带了时间戳也能使用持久会话功能,后面切换到EMQX后,因为EMQX将完整的ClientID与会话对应,所以每次设备重新上线,ClientID是动态的,所以都是全新的会话

目前暂时还不行,业务设计上我们更倾向于遵守协议规范,因为协议上clientid是唯一的,username甚至可以为空,所以不能用username作为标识符。
如果是企业版用户,可以找商务咨询一下定制开发的。