PUBLISH 消息由客户机发送到代理,以便分发给感兴趣的订户。每条 PUBLISH 消息与主题名(又称为主题或通道)关联。这是订户可以注册兴趣的定义信息源的分类法的层次结构名称空 间。发布到特定主题名的消息发送到该主题连接的订户。
为了维持对称,当客户机预订一个或多个主题时,发布到那些主题的任何消息都将被代理作为 PUBLISH 消息发送到客户机。
下表显示固定头格式。
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
字节 1 | 消息类型(3) | DUP 标志 | QoS 级别 | RETAIN | ||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
字节 2 | 剩余长度 |
对于由于检测到故障重新发送的具有 QoS 级别 1 或级别 2 的消息,DUP 位设置为 1。这对代理表示消 息可能重复已经接收到的消息。此信息对代理的意义取决于 QoS 级别。DUP 位不用于具有 QoS 级别 0 的消息。
可变头包含以下字段:
通常,协议库负责生成消息标识,并将它传递回发布应用程序(可能作为返回句柄)。此方法避免在单个客户机上运行的多个应用程序 或发布进程生成重复的消息标识的风险。
不能在具有 QoS 级别 0 的可变头中使用消息标识。
消息标识为 16 位不带正负号的整数,通常一条消息到另一条消息的消息标识正好增加 1,但这并不是必需的。 消息标识的 2 字节定序为 MSB,然后是 LSB(大尾数法)。
消息标识 0(即 0x0000)是作为无效消息标识保留的,并且不能使用。
下面的表显示了 PUBLISH 消息的可变头示例。
字段 | 值 |
---|---|
主题名: | "a/b" |
QoS 级别 | 1 |
消息标识: | 10 |
下表中显示了此情况下的可变头格式。
描述 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
主题名称 | |||||||||
字节 1 | 长度 MSB(0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
字节 2 | 长度 LSB(3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
字节 3 | 'a' (0x61) | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
字节 4 | '/' (0x2F) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
字节 5 | 'b' (0x62) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
消息标识 | |||||||||
字节 6 | 消息标识 MSB(0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
字节 7 | 消息标识 LSB(10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |