Amazon Simple Queue Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon SQS 消息属性

Amazon SQS 使您可以 使用消息属性在消息中包括结构化的元数据 (例如时间戳、地理空间数据、签名和标识符)。。每条消息最多可以包含 10 个属性。消息属性是可选的,并独立于消息正文 (不过会随之一起发送)。使用者可以使用消息属性以特定方式处理消息,而无需先处理消息正文。有关使用 AWS 管理控制台或AWS SDK for Java发送带有属性消息的信息,请参阅将带有属性的消息发送到队列

消息属性组件

重要

消息属性的所有组件都包括在 256 KB 的消息大小限制中。

NameTypeValue 和消息正文也不应为空或 null。

每个消息属性包含以下组件:

  • Name – 消息属性名称可以包含以下字符:A-Za-z0-9、下划线 (_)、连字符 (-) 和句点 (.)。以下限制适用:

    • 最长可为 256 个字符

    • 不能以 AWS.Amazon. (或任意大小写变化形式) 开头

    • 区分大小写

    • 必须在消息的所有属性名中唯一

    • 不能以句点开头或结尾

    • 序列中不能有句点

  • Type – 消息属性数据类型。支持的类型包括 StringNumberBinary。您也可以添加有关任意数据类型的自定义信息。数据类型与消息正文具有相同的限制(有关更多信息,请参阅 Amazon Simple Queue Service API Reference 中的 SendMessage)。此外,以下限制将适用:

    • 最长可为 256 个字符

    • 区分大小写

  • Value – 消息属性值。对于 String 数据类型,属性值具有与消息正文相同的限制。

消息属性数据类型

消息属性数据类型指示 Amazon SQS 如何处理对应的消息属性值。例如,如果类型为 Number,Amazon SQS 验证数字值。

Amazon SQS 支持使用 .custom-data-type 格式的可选自定义数据类型标签的逻辑数据类型 StringNumberBinary

  • StringString 属性可使用 UTF-8 二进制编码的存储 Unicode 文本。有关更多信息,请参阅 ASCII 可打印字符

  • NumberNumber 属性可以存储正数或负数数值。数字最多可精确到 38 位,并且介于 10^-128 和 10^+126 之间。

    注意

    Amazon SQS 删除开头和结尾的零。

  • Binary – Binary 属性可以存储任何二进制数据,例如压缩数据、加密数据或图像。

  • Custom – 要创建自定义数据类型,请将 custom-type 标签附加到任意数据类型。例如:

    • Number.byteNumber.shortNumber.intNumber.float 可帮助区分各种数字类型。

    • Binary.gifBinary.png 可帮助区分文件类型。

    注意

    Amazon SQS 不解释、验证或使用附加数据。

    custom-type 标签与消息正文具有相同的限制。

计算消息属性 MD5 消息摘要

如果使用AWS SDK for Java,可以跳过本节。适用于 Java 的开发工具包的 MessageMD5ChecksumHandler 类支持 Amazon SQS 消息属性的 MD5 消息摘要。

如果使用查询 API 或不支持 Amazon SQS 消息属性的 MD5 消息摘要的 AWS 开发工具包之一,则必须使用以下指南来执行 MD5 消息摘要计算。

注意

请始终在 MD5 消息摘要计算中包括自定义数据类型后缀。

概览

以下概述了 MD5 消息摘要计算算法:

  1. 按名称的升序对所有消息属性进行排序。

  2. 将每个属性的各个部分 (NameTypeValue) 进行编码并存入缓冲区。

  3. 计算整个缓冲区的消息摘要。

下图演示单个消息属性的 MD5 消息摘要的编码:

对单个 Amazon SQS 消息属性编码

  1. 对名称编码:长度 (4 字节) 和名称的 UTF-8 字节。

  2. 对数据类型编码:长度 (4 字节) 和数据类型的 UTF-8 字节。

  3. 对值 (1 个字节) 的传输类型 (StringBinary) 编码。

    注意

    逻辑数据类型 StringNumber 使用 String 传输类型。

    逻辑数据类型 Binary 使用 Binary 传输类型。

    1. 对于 String 传输类型,编码为 1。

    2. 对于 Binary 传输类型,编码为 2。

  4. 对属性值编码。

    1. 对于 String 传输类型,对属性值编码:长度 (4 字节) 和值的 UTF-8 字节。

    2. 对于 Binary 传输类型,对属性值编码:长度 (4 字节) 和值的原始字节。