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

Amazon SQS 消息属性

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

消息属性组件

重要

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

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

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

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

    • 最长可为 256 个字符

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

    • 区分大小写

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

    • 不能以句点开头或结尾

    • 序列中不能有句点

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

    • 最长可为 256 个字符

    • 区分大小写

  • – 消息属性值。对于 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 字节) 和值的原始字节。