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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

消息元数据

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

Amazon SQS 消息属性

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

注意

不要混淆消息属性与消息系统属性:尽管您可以使用消息属性将自定义元数据附加到应用程序的 Amazon SQS 消息,但您可以使用消息系统属性存储其他元数据Amazon服务,例如Amazon X-Ray.

消息属性组件

重要

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

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

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

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

    • 最长可为 256 个字符

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

    • 区分大小写

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

    • 不能以句点开头或结尾

    • 序列中不能有句点

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

    • 最长可为 256 个字符

    • 区分大小写

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

消息属性数据类型

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

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

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

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

    注意

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

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

  • Custom (自定义)— 要创建自定义数据类型,请将自定义类型标签附加到任意数据类型。例如:

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

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

    注意

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

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

计算消息属性的 MD5 消息摘要

如果使用Amazon SDK for Java,可以跳过本节。这些区域有:MessageMD5ChecksumHandler的 SDK for Java 发工具包类支持 Amazon SQS 消息属性的 MD5 消息摘要。

如果您使用查询 API 或其中一个AmazonAmazon SQS 消息属性不支持 MD5 消息摘要的开发工具包,则必须使用以下指南来执行 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 字节)和原始字节。

Amazon SQS 消息系统属性

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

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

  • 当前唯一受支持的消息系统属性是 AWSTraceHeader。它的类型必须是 String 而且值必须为格式正确的 Amazon X-Ray 跟踪标头字符串。

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