ActiveMQ Artemis MQTT V3.1 ClientID严格检查

问题描述 投票:0回答:1

根据标准文档,MQTT V3.1 和 V3.1.1 之间允许的客户端 ID 存在差异。

V3.1 更加严格,它要求任何代理如果客户端 ID 超过 23 个字符,则必须拒绝连接V3.1 规范

如果客户端 ID 包含超过 23 个字符,服务器将使用 CONNACK 返回码 2 响应 CONNECT 消息:标识符被拒绝。

V3.1.1 定义了一个字符集,但允许经纪商可以偏离严格的要求 V3.1.1 规范

服务器必须允许长度在 1 到 23 UTF-8 编码字节之间的 ClientId,并且仅包含字符 “0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”[MQTT-3.1.3-5]。 服务器可以允许包含超过 23 个编码字节的 ClientId。服务器可以允许包含未包含在上面给出的列表中的字符的 ClientId。

我正在将 Apache ActiveMQ Artemis 与官方容器映像 Broker.xml 配置提供的标准 MQTT 接受器一起使用。

不幸的是,我必须与仅支持 V3.1 的客户端交换消息,但超出了客户端 ID 中的长度和允许的字符数限制。如果 ActiveMQ 被迫使用 V3.1,它将应用严格检查并拒绝连接。

MqttIdentifierRejectedException:无效的 clientIdentifier

是否有一个设置允许将 ActiveMQ 配置为对客户端 ID 更加宽松? 我在文档中找不到任何内容。不幸的是我无法改变客户的行为。

mqtt activemq-artemis
1个回答
0
投票

ActiveMQ Artemis 确实 允许 MQTT 3.1.1 和 5 个客户端的客户端 ID 长度超过 23 个字符。

但是,MQTT 3.1 规范 不允许 允许客户端 ID 超过 23 个字符。它说:

客户端标识符(客户端 ID)长度在 1 到 23 个字符之间,用于向服务器唯一标识客户端。它在连接到单个服务器的所有客户端中必须是唯一的,并且是处理 QoS 级别 1 和 2 的 Message ID 消息的关键。如果客户端 ID 包含超过 23 个字符,则服务器会使用 CONNACK 返回来响应 CONNECT 消息代码 2:标识符被拒绝。

ActiveMQ Artemis 使用 Netty 的 MQTT 编解码器实现,并且 it 无法解码来自客户端 ID 超过 23 个字符的 3.1 客户端的

CONNECT
数据包。经纪人对此真的无能为力。

© www.soinside.com 2019 - 2024. All rights reserved.