本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 SQS 的消息元数据
您可以使用消息属性将自定义元数据附加到应用程序的 Amazon SQS 消息。您可以使用消息系统属性来存储其他 Amazon 服务(如 Amazon X-Ray)的元数据。
Amazon SQS 消息属性
Amazon SQS 支持您使用消息属性,在消息中包括结构化元数据(如时间戳、地理空间数据、签名和标识符)。每条消息最多可以包含 10 个属性。消息属性是可选的,并独立于消息正文(不过会随之一起发送)。使用者可以使用消息属性以特定方式处理消息,而无需先处理消息正文。有关使用 Amazon SQS 控制台发送带有属性的消息的信息,请参阅使用 Amazon SQS 发送带有属性的消息。
注意
不要将消息属性与消息系统属性混淆:尽管您可以使用消息属性将自定义元数据附加到应用程序的 Amazon SQS 消息,但您可以使用消息系统属性来存储 Amazon 其他服务的元数据,例如。 Amazon X-Ray
消息属性组件
重要
消息属性的所有组件都包括在 256 KB 的消息大小限制中。
Name
、Type
、Value
和消息正文不得为空或 null。
每个消息属性包含以下组件:
-
名称 – 消息属性名称可以包含以下字符:
A
-Z
、a
-z
、0
-9
、下划线 (_
)、连字符 (-
) 和句点 (.
)。以下限制适用:-
最长可为 256 个字符
-
不能以
AWS.
或Amazon.
(或任意大小写变化形式)开头 -
区分大小写
-
必须在消息的所有属性名中唯一
-
不能以句点开头或结尾
-
序列中不能有句点
-
-
类型 – 消息属性数据类型。支持的类型包括
String
、Number
和Binary
。您也可以添加有关任意数据类型的自定义信息。数据类型与消息正文具有相同的限制(有关更多信息,请参阅 Amazon Simple Queue Service API 参考中的SendMessage
)。此外,以下限制将适用:-
最长可为 256 个字符
-
区分大小写
-
-
值 – 消息属性值。对于
String
数据类型,属性值具有与消息正文相同的限制。
消息属性数据类型
消息属性数据类型指示 Amazon SQS 如何处理对应的消息属性值。例如,如果类型为 Number
,Amazon SQS 会验证数字值。
Amazon SQS 支持使用可选自定义数据类型标签(格式为
)的逻辑数据类型 .custom-data-type
String
、Number
和 Binary
。
-
String –
String
属性可以存储使用任意有效 XML 字符的 Unicode 文本。 -
Number –
Number
属性可以存储正数或负数数值。数字最多可精确到 38 位,并且介于 10^-128 和 10^+126 之间。注意
Amazon SQS 会删除开头和结尾的零。
-
Binary – Binary 属性可以存储任何二进制数据,例如压缩数据、加密数据或图像。
-
Custom – 要创建自定义数据类型,请将 custom-type 标签附加到任意数据类型。例如:
-
Number.byte
、Number.short
、Number.int
和Number.float
可帮助区分各种数字类型。 -
Binary.gif
和Binary.png
可帮助区分文件类型。
注意
Amazon SQS 不会解释、验证或使用附加数据。
custom-type 标签与消息正文具有相同的限制。
-
计算消息属性的 MD5 消息摘要
如果您使用 Amazon SDK for Java,则可以跳过本节。适用于 Java 的 SDK MessageMD5ChecksumHandler
类支持 Amazon SQS 消息属性的 MD5 消息摘要。
如果您使用查询 API 或其中一个不支持 Amazon Amazon SQS 消息属性的 MD5 消息摘要的软件开发工具包,则必须使用以下指南来执行 MD5 消息摘要计算。
注意
请始终在 MD5 消息摘要计算中包含自定义数据类型后缀。
概述
以下概述了 MD5 消息摘要计算算法:
-
按名称的升序对所有消息属性进行排序。
-
将每个属性的各个部分(
Name
、Type
和Value
)进行编码并存入缓冲区。 -
计算整个缓冲区的消息摘要。
下图演示单个消息属性的 MD5 消息摘要的编码:
对单个 Amazon SQS 消息属性编码
-
对名称编码:长度(4 字节)和名称的 UTF-8 字节。
-
对数据类型编码:长度(4 字节)和数据类型的 UTF-8 字节。
-
对值(1 个字节)的传输类型(
String
或Binary
)编码。注意
逻辑数据类型
String
和Number
使用String
传输类型。逻辑数据类型
Binary
使用Binary
传输类型。-
对于
String
传输类型,编码为 1。 -
对于
Binary
传输类型,编码为 2。
-
-
对属性值编码。
-
对于
String
传输类型,对属性值编码:长度(4 字节)和值的 UTF-8 字节。 -
对于
Binary
传输类型,对属性值编码:值的长度(4 字节)和原始字节。
-
Amazon SQS 消息系统属性
您可以使用消息属性将自定义元数据附加到应用程序的 Amazon SQS 消息,可以使用消息系统属性来存储其他 Amazon
服务(例如 Amazon X-Ray)的元数据。有关更多信息,请参阅 Amazon Simple Queue Service API 参考中 SendMessage
和 SendMessageBatch
API 操作的 MessageSystemAttribute
请求参数、ReceiveMessage
API 操作的 AWSTraceHeader
属性及 MessageSystemAttributeValue
数据类型。
消息系统属性的结构与消息属性完全一样,除了以下例外:
-
当前唯一受支持的消息系统属性是
AWSTraceHeader
。其类型必须为String
,其值必须是格式正确的 Amazon X-Ray 跟踪标头字符串。 -
消息系统属性的大小不会计入消息的总大小。