消息元数据 - Amazon Simple Queue Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

消息元数据

您可以使用消息属性将自定义元数据附加到应用程序的 Amazon SQS 消息。您可以使用消息系统属性来存储其他 AWS 服务(如 AWS X-Ray)的元数据。

Amazon SQS 消息属性

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

注意

不要将消息属性与 邮件系统属性: 然而,您可以使用消息属性将自定义元数据附加到 Amazon SQS 消息,您可以使用 邮件系统属性 存储其他 AWS 服务,例如 AWS X-Ray.

消息属性组件

重要

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

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

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

  • 姓名 – 邮件属性名称可包含下列字符: A-Z, a-z, 0-9,下划线(_)、连字符(-)、和周期(.)。以下限制适用:

    • 最长可为 256 个字符

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

    • 区分大小写

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

    • 不能以句点开头或结尾

    • 序列中不能有句点

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

    • 最长可为 256 个字符

    • 区分大小写

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

消息属性数据类型

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

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

  • StringString 属性可以存储使用任意有效 XML 字符的 Unicode 文本。

  • 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 消息摘要计算中包括自定义数据类型后缀。

Overview

以下概述了 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 字节)和原始字节。

Amazon SQS 消息系统属性

而您可以使用 消息属性 将自定义元数据附加到 Amazon SQS 消息,您可以使用 邮件系统属性 存储其他 AWS 服务,例如 AWS X-Ray. 有关更多信息,请参阅 SendMessageSendMessageBatch API 操作的MessageSystemAttribute 请求参数、ReceiveMessage API 操作的 AWSTraceHeader 属性,以及 Amazon Simple Queue Service API Reference 中的 MessageSystemAttributeValue 数据类型。

消息系统属性的结构与消息属性完全一样,除了以下例外:

  • 目前唯一支持的报文系统属性为 AWSTraceHeader。它的类型必须是 String 并且其值必须正确格式化 AWS X-Ray 跟踪标题字符串。

  • 消息系统属性的大小不会计入消息的总大小。