主题名必须是PUBLISH报文可变报头的第一个字段。它必须是 1.5.3节定义的UTF-8编码的字符串。
PUBLISH报文中的主题名不能包含通配符 。
服务端发送给订阅客户端的PUBLISH报文的主题名必须匹配该订阅的主题过滤器(根据 4.7节定义的匹配过程)。
报文标识符 Packet Identifier只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。2.3.1节提供了有关报文标识符的更多信息。
有效载荷有效载荷包含将被发布的应用消息。
数据的内容和格式是应用特定的。有效载荷的长度这样计算:用固定报头中的剩余长度字段的值减去可变报头的长度。包含零长度有效载荷的PUBLISH报文是合法的。
响应PUBLISH报文的接收者必须按照根据PUBLISH报文中的QoS等级发送响应。
服务质量等级 预期响应QoS 0 无响应
QoS 1 PUBACK报文
QoS 2 PUBREC报文
PUBACK –发布确认
PUBACK报文是对QoS 1等级的PUBLISH报文的响应。
剩余长度字段
表示可变报头的长度。对PUBACK报文这个值等于2.
可变报头包含等待确认的PUBLISH报文的报文标识符。
有效载荷PUBACK报文没有有效载荷。
PUBREC – 发布收到(QoS 2,第一步)PUBREC报文是对QoS等级2的PUBLISH报文的响应。它是QoS 2等级协议交换的第二个报文。
剩余长度字段
表示可变报头的长度。对PUBREC报文它的值等于2。
可变报头可变报头包含等待确认的PUBLISH报文的报文标识符。
有效载荷PUBREC报文没有有效载荷。
Netty实现
MqttMessage pubRecMessage = MqttMessageFactory.newMessage( new MqttFixedHeader(MqttMessageType.PUBREC, false, MqttQoS.AT_MOST_ONCE, false, 2), MqttMessageIdVariableHeader.from(variableHeader.messageId()), null);