PUBLISH 发布消息

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。
DUP 标志
设置为零(0)。这表示第一次发送消息。

对于由于检测到故障重新发送的具有 QoS 级别 1 或级别 2 的消息,DUP 位设置为 1。这对代理表示消 息可能重复已经接收到的消息。此信息对代理的意义取决于 QoS 级别。DUP 位不用于具有 QoS 级别 0 的消息。

RETAIN 标志
设置为零。这表示不要保留。
剩余长度字段
可变头长度加有效内容的长度。它可以是多字节字段。

可变头

可变头包含以下字段:

主题名称
UTF 编码的字符串。
消息标识
显示具有 QoS 级别 1 和 QoS 级别 2 的消息。

通常,协议库负责生成消息标识,并将它传递回发布应用程序(可能作为返回句柄)。此方法避免在单个客户机上运行的多个应用程序 或发布进程生成重复的消息标识的风险。

不能在具有 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

有效内容

包含用于发布的数据。数据的内容和格式是应用程序特定的。固定头中的“剩余长度”字段包含可变头长度和有效内容长度。

响应

对 PUBLISH 消息的响应取决于 QoS 级别。下表显示了预期的响应。

QoS 级别 期待的响应
QoS 0
QoS 1 PUBACK
QoS 2 PUBREC

操作

可以从发布程序将 PUBLISH 消息发送到代理或从代理发送到订户。接收消息的接收方操作取决于消息的 QoS 级别:

QoS 0
使得对感兴趣的各方提供消息。
QoS 1
记录消息进行持久存储、使它对感兴趣的各方提供,并将 PUBACK 消息返回到发送方。
QoS 2
记录消息进行持久存储、不使它对感兴趣的各方提供,并将 PUBREC 消息返回到发送方。

在代理接收该消息的情况下,“感兴趣的各方”表示该 PUBLISH 消息主题的订户。在订户接收该消息的情况下,“感兴趣的各方”表示客户机上已经预订了一个或多个主题并正在等待来自代理消息的应用程序。

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac10970_