SUBSCRIBE 预订已指定的主题

SUBSCRIBE 消息允许客户机注册对代理感兴趣的一个或多个主题名。从代理将发布到这些主题的消息传递到客户机作为 PUBLISH 消息。SUBSCRIBE 消息还指定订户要接收发布消息的 QoS 级别。

固定头

下表显示固定头格式。

7 6 5 4 3 2 1 0
字节 1 消息类型(8) DUP 标志 QoS 级别 RETAIN
  1 0 0 0 0 0 1 x
字节 2 剩余长度
QoS 级别
SUBSCRIBE 消息使用 QoS 级别 1 来确认多个预订请求。通过与消息标识匹配,识别相应的 SUBACK 消息。同时以和处理 PUBLISH 消息相同的方式处理 SUBSCRIBE 消息重试。
DUP 标志
在本示例中,DUP 标志设置为零(0)以表明这是第一次发送此消息。如果由于在指定的超时周期后 SUBACK 消息还未到达,而要重新发送此消息,则设置 DUP 位以便向代理表明它可能是已经接收过的重复消息。
RETAIN 标志
未使用。
剩余长度字段
有效内容的长度。它可以是多字节字段。

可变头

因为 SUBSCRIBE 消息具有 QoS 级别 1,所以可变头包含消息标识。

通常,协议库生成消息标识,并将它传递回发布应用程序(例如,作为返回句柄)。这防止在单个客户机上运行的多个应用程序或多个发布进程生成重复的消息标识。

消息标识 0(0x0000)保留为无效的消息标识,不能使用。消息标识为 16 位不带正负号的整数,通常一条消息到另一条消息的消息标识正好增加 1,但这并不是必需的。消息标识的两个字节的排列次序为 MSB,后跟 LSB(大尾数法)。

下表显示了带有消息标识为 10 的可变头的示例格式。

  描述 7 6 5 4 3 2 1 0
消息标识
字节 1 消息标识 MSB(0) 0 0 0 0 0 0 0 0
字节 2 消息标识 LSB(10) 0 0 0 0 1 0 1 0

有效内容

SUBSCRIBE 消息的有效内容包含客户机要预订的主题名列表,以及客户机要接收消息的 QoS 级别。字符串是 UTF 编码的,并且 QoS 级别占用单个字节的 2 位。在下表中的有效内容示例中显示了继续打包这些主题/ QoS 对。

主题名称 "a/b"
请求的 QoS 1
主题名称 "c/d"
请求的 QoS 2

未压缩 SUBSCRIBE 消息中的主题名。

下表中显示了示例有效内容的格式。

  描述 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
请求的 QoS
字节 6 请求的 QoS(1) x x x x x x 0 1
主题名称
字节 7 长度 MSB(0) 0 0 0 0 0 0 0 0
字节 8 长度 LSB(3) 0 0 0 0 0 0 1 1
字节 9 'c' (0x63) 0 1 1 0 0 0 1 1
字节 10 '/' (0x2F) 0 0 1 0 1 1 1 1
字节 11 'd' (0x64) 0 1 1 0 0 1 0 0
请求的 QoS
字节 12 请求的 QoS(2) x x x x x x 1 0

假设授权请求的 QoS 级别,客户机接收小于等于此级别的 PUBLISH 消息,这取决于来自发布程序的原始消息的 QoS 级别。例如,如果客户机对特殊主题具有 QoS 级别 1 的预订,则对于该主题的 QoS 级别 0 PUBLISH 消息发送到 QoS 级别 0 的客户机。对于相同主题的 QoS 级别 2 PUBLISH 消息则降低到 QoS 级别 1 以传递到客户机。

按此推论,预订 QoS 级别 2 的主题与声称“我想接收在 QoS 上发布的有关本主题的消息”是对等的。

下表中显示了按字节编码的“已请求 QoS”字段,它位于每个 UTF 编码的主题名称后面。

7 6 5 4 3 2 1 0
  保留 保留 保留 保留 保留 保留 QoS 级别
  x x x x x x    

在当前的协议版本中不使用此字节的 6 个高位。保留它们供将来使用。

响应

当它从客户机接收 SUBSCRIBE 消息时,代理用 SUBACK 消息响应。

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