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

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

Amazon SQS 的消息元数据

使用消息属性为您的应用程序向 Amazon SQS 消息添加自定义元数据。使用消息系统属性存储元数据,以便与其他属性集成 Amazon Web Services 服务,例如 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消息属性的消息摘要

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

如果您使用查询 API 或不支持 Amazon SQS MD5 消息属性的消息摘要的 API,则必须使用以下指南来执行消息摘要计算 MD5 。 Amazon SDKs

注意

始终在 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 跟踪标头字符串。

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