

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

# Amazon SQS 的消息元数据
<a name="sqs-message-metadata"></a>

使用消息属性将自定义元数据添加到应用程序的 Amazon SQS 消息。使用消息系统属性存储元数据，以便与其他属性集成 AWS 服务，例如 AWS X-Ray。

## Amazon SQS 消息属性
<a name="sqs-message-attributes"></a>

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

**注意**  
不要将消息属性与*消息系统属性*混淆：尽管您可以使用消息属性将自定义元数据附加到应用程序的 Amazon SQS 消息，但[您可以使用消息系统](#sqs-message-system-attributes)属性来存储 AWS 其他服务的元数据，例如。 AWS X-Ray

**Topics**
+ [

### 消息属性组件
](#message-attribute-components)
+ [

### 消息属性数据类型
](#message-attribute-data-types)
+ [

### 计算 MD5 消息属性的消息摘要
](#sqs-attributes-md5-message-digest-calculation)

### 消息属性组件
<a name="message-attribute-components"></a>

**重要**  
消息属性的所有组件都包括在 1 MiB 的消息大小限制中。  
`Name`、`Type`、`Value` 和消息正文不得为空或 null。

每个消息属性包含以下组件：
+ **名称** – 消息属性名称可以包含以下字符：`A`-`Z`、`a`-`z`、`0`-`9`、下划线 (`_`)、连字符 (`-`) 和句点 (`.`)。以下限制适用：
  + 最长可为 256 个字符
  + 不能以 `AWS.` 或 `Amazon.`（或任意大小写变化形式）开头
  + 区分大小写
  + 必须在消息的所有属性名中唯一
  + 不能以句点开头或结尾
  + 序列中不能有句点
+ **类型** – 消息属性数据类型。支持的类型包括 `String`、`Number` 和 `Binary`。您也可以添加有关任意数据类型的自定义信息。数据类型与消息正文具有相同的限制（有关更多信息，请参阅 *Amazon Simple Queue Service API 参考*中的 `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)`）。此外，以下限制将适用：
  + 最长可为 256 个字符
  + 区分大小写
+ **值** – 消息属性值。对于 `String` 数据类型，属性值具有与消息正文相同的限制。

### 消息属性数据类型
<a name="message-attribute-data-types"></a>

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

Amazon SQS 支持使用可选自定义数据类型标签（格式为 `.custom-data-type`）的逻辑数据类型 `String`、`Number` 和 `Binary`。
+ **String** – `String` 属性可以存储使用任意有效 XML 字符的 Unicode 文本。
+ **Number** – `Number` 属性可以存储正数或负数数值。数字最多可精确到 38 位，并且介于 10^-128 和 10^\$1126 之间。
**注意**  
Amazon SQS 会删除开头和结尾的零。
+ **Binary** – Binary 属性可以存储任何二进制数据，例如压缩数据、加密数据或图像。
+ **Custom** – 要创建自定义数据类型，请将 custom-type 标签附加到任意数据类型。例如：
  + `Number.byte`、`Number.short`、`Number.int` 和 `Number.float` 可帮助区分各种数字类型。
  + `Binary.gif` 和 `Binary.png` 可帮助区分文件类型。
**注意**  
Amazon SQS 不会解释、验证或使用附加数据。  
custom-type 标签与消息正文具有相同的限制。

### 计算 MD5 消息属性的消息摘要
<a name="sqs-attributes-md5-message-digest-calculation"></a>

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

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

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

#### 概述
<a name="attributes-md5-message-digest-calculation-overview"></a>

以下是 MD5 消息摘要计算算法的概述：

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

1. 将每个属性的各个部分（`Name`、`Type` 和 `Value`）进行编码并存入缓冲区。

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

下图显示了单个消息属性的 MD5 消息摘要的编码：

![\[单个消息属性的 MD5 消息摘要编码。\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-msg-attrib-md5.png)


#### 对单个 Amazon SQS 消息属性编码
<a name="attributes-md5-message-digest-calculation-encode-single-attribute"></a>

1. 对名称编码：长度（4 字节）和名称的 UTF-8 字节。

1. 对数据类型编码：长度（4 字节）和数据类型的 UTF-8 字节。

1. 对值（1 个字节）的传输类型（`String` 或 `Binary`）编码。
**注意**  
逻辑数据类型 `String` 和 `Number` 使用 `String` 传输类型。  
逻辑数据类型 `Binary` 使用 `Binary` 传输类型。

   1. 对于 `String` 传输类型，编码为 1。

   1. 对于 `Binary` 传输类型，编码为 2。

1. 对属性值编码。

   1. 对于 `String` 传输类型，对属性值编码：长度（4 字节）和值的 UTF-8 字节。

   1. 对于 `Binary` 传输类型，对属性值编码：值的长度（4 字节）和原始字节。

## Amazon SQS 消息系统属性
<a name="sqs-message-system-attributes"></a>

您可以使用[消息属性](#sqs-message-attributes)将自定义元数据附加到应用程序的 Amazon SQS 消息，可以使用*消息系统属性*来存储其他 AWS 服务（例如 AWS X-Ray）的元数据。有关更多信息，请参阅 *Amazon Simple Queue Service API 参考*中 `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)` 和 `[SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)` API 操作的 `MessageSystemAttribute` 请求参数、`[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)` API 操作的 `AWSTraceHeader` 属性及 `[MessageSystemAttributeValue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageSystemAttributeValue.html)` 数据类型。

消息系统属性的结构与消息属性完全一样，除了以下例外：
+ 当前唯一受支持的消息系统属性是 `AWSTraceHeader`。其类型必须为`String`，其值必须是格式正确的 AWS X-Ray 跟踪标头字符串。
+ 消息系统属性的大小不会计入消息的总大小。