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

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

亚马逊 SQS 的消息元数据

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

Amazon SQS 消息属性

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

注意

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

消息属性组件

重要

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

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

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

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

    • 最长可为 256 个字符

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

    • 区分大小写

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

    • 不能以句点开头或结尾

    • 序列中不能有句点

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

    • 最长可为 256 个字符

    • 区分大小写

  • – 消息属性值。对于 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 消息摘要

如果您使用 Amazon SDK for Java,则可以跳过本节。适用于 Java 的 SDK MessageMD5ChecksumHandler 类支持 Amazon SQS 消息属性的 MD5 消息摘要。

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

注意

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

概述

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

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

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

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

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

单个消息属性的 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)的元数据。有关更多信息,请参阅 Amazon Simple Queue Service API 参考SendMessageSendMessageBatch API 操作的 MessageSystemAttribute 请求参数、ReceiveMessage API 操作的 AWSTraceHeader 属性及 MessageSystemAttributeValue 数据类型。

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

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

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