你好,目前 MQTT 桥接的 Client ID 是我们内部根据节点名称、资源的名称生成的。具体可以参考代码
和
那就是目前没有办法自定义桥接的ClientID了吗
是的,暂不支持的。
由于底层我们有多个连接池、并且 EMQX 还可能有多个节点。所以,这些所有的客户端都使用同一个 ClientID 可能是不太正确的。
你那边如果要对接阿里云,对 Client ID 有什么样需求么?我感觉我们可以讨论,如果有必要可以在 EMQX 这边新增特性来完成
非常感谢您的回答,阿里云物联网平台这边的连接的clientID需要包含以下几个内容:ProductKey(阿里云提供),DeviceName(阿里云提供),剩下就是securemode=2,signmethod=hmacsha256,timestamp=1706601044427|
我记得,这个是他们物联网平台接设备的时候对设备的要求?而不是那种平台的级别 MQTT 消息服务。
这种格式的要求,看起来应用到 emqx 上的 MQTT 桥接感觉有点复杂。这相当于是需要完全的指定 Client ID 这个字符串了
CC @wivwiv 进行需求评估
我这边更换了mosquitto之后桥接配置齐全是可以连接上的
公有云的物联网平台(或者说所有 MQTT Broker)要求客户端 ID 是唯一的,否则会产生客户端之间的互踢问题。
EMQX 通常是通过集群部署,几个节点会使用相同的客户端 ID 连接造成互踢,所以 MQTT 桥接中没有开放固定设置客户端 ID 的选项。
我们计划在未来增加独享连接的支持,一个集群中的所有节点只会使用一个客户端连接。
目前没有太好的办法进行绕过,如果具有自己编译 EMQX 的能力,@heeejianbo 可以指导一下 v5.5.0 中怎么把后缀去掉编译一个自己的版本。
另外项目允许的话也可以尝试一下 NanoMQ,它也是单节点运行的。
- MQTT 连接器中连接池设置为 1
- 单节点模式部署