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

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

Amazon SNS 消息属性

Amazon SNS 支持传输消息属性,这些属性支持您提供与消息相关的结构化元数据项目(如时间戳、地理空间数据、签名和标识符)。对于 SQS 订阅,在启用 Raw Message Delivery(原始消息传输)时,最多可以发送 10 个消息属性。要发送 10 个以上的消息属性,必须禁用 Raw Message Delivery(原始消息传输)。所具有的消息属性(定向到启用了原始消息传输的 Amazon SQS 订阅)超过 10 个的消息将作为客户端错误被丢弃。

消息属性是可选的,并独立于消息正文(但随之一起发送)。接收方可以使用此信息来决定如何处理消息,而不必先处理消息正文。

有关使用 Amazon Web Services Management Console或 Amazon SDK for Java 发送带有属性的消息的信息,请参阅要使用 Amazon Web Services Management Console 将消息发布到 Amazon SNS 主题教程。

注意

当消息结构为 String 而不是 JSON 时,仅发送消息属性。

您还可以使用消息属性,帮助构造移动终端节点的推送通知消息。在这种情况下,消息属性仅用于帮助构造推送通知消息。这些属性不会被传递到终端节点,就像在发送带有消息属性的消息到 Amazon SQS 终端节点时一样。

您还可以使用消息属性来让消息变为可通过订阅筛选策略进行筛选。可以将筛选策略应用于主题订阅。应用了筛选策略且筛选策略范围设置为 MessageAttributes(默认值)时,订阅将只接收具有策略接受的属性的那些消息。有关更多信息,请参阅Amazon SNS 消息筛选

注意

使用消息属性进行筛选时,该值必须是有效的 JSON 字符串。这样做可以确保将消息传送到启用了消息属性筛选的订阅。

消息属性项目和验证

每个消息属性包含以下项目:

  • Name – 消息属性的名称可以包含以下字符:A-Z、a-z、0-9、下划线 (_)、连字符 (-) 和句点 (.)。名称不得以句点开头或结尾,并且不应包含连续句点。名称区分大小写,且必须在消息的所有属性名称中是唯一的。名称最多可以有 256 个字符。名称不能以 AWS.Amazon. (或任何大小写变化形式)开头,因为这些前缀已预留以供 Amazon Web Services 使用。

  • Type – 受支持的消息属性数据类型有 StringString.ArrayNumberBinary。数据类型在内容方面具有与消息正文相同的限制。数据类型区分大小写,长度最多可以为 256 字节。想要了解更多信息,请参阅 消息属性数据类型和验证 部分。

  • Value – 用户指定的消息属性值。对于字符串数据类型,值属性在内容方面具有与消息正文相同的限制。有关更多信息,请参阅 Amazon Simple Notification Service API 参考中的发布操作。

名称、类型和值都不得为空或 null。此外,消息正文也不应为空或 null。消息属性的所有部分 (包括名称、类型和值) 都包含在消息大小限制中,该限制当前是 256 KB。

消息属性数据类型和验证

消息属性数据类型指示 Amazon SNS 处理消息属性值的方式。例如,如果类型是数字,则 Amazon SNS 会验证它是否为数字。

除非另有说明,否则 Amazon SNS 支持所有终端节点的以下逻辑数据类型:

  • String – 字符串是使用 UTF-8 二进制编码的 Unicode。有关代码值列表,请参见 http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

    注意

    消息属性中不支持代理值。例如,使用代理值来表示表情符号将收到以下错误:Invalid attribute value was passed in for message attribute

  • String.Array – 格式为字符串的阵列,可以包含多个值。这些值可以是字符串、数字或关键字 truefalsenull。数字或布尔类型的 String.Array 不需要引号。多个 String.Array 值用逗号分隔。

    Amazon Lambda 订阅不支持此数据类型。如果您为 Lambda 终端节点指定此数据类型,它会作为 Amazon SNS 传输给 Lambda 的 JSON 负载中的 String 数据类型传递。

  • Number – 数字是正或负整数或是浮点数。数字具有足够的范围和精度,以便包含整数、浮点数和双精度数通常支持的大多数可能值。数字的值可以介于 -109 到 109 之间,精确至小数点后 5 位数。系统会删减开头和结尾的 0。

    Amazon Lambda 订阅不支持此数据类型。如果您为 Lambda 终端节点指定此数据类型,它会作为 Amazon SNS 传输给 Lambda 的 JSON 负载中的 String 数据类型传递。

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

为移动推送通知预留的消息属性

下表列出了可用于构造推送通知消息的移动推送通知服务的预留消息属性:

推送通知服务 预留的消息属性
ADM AWS.SNS.MOBILE.ADM.TTL
APN1 AWS.SNS.MOBILE.APNS_MDM.TTL
AWS.SNS.MOBILE.APNS_MDM_SANDBOX.TTL
AWS.SNS.MOBILE.APNS_PASSBOOK.TTL
AWS.SNS.MOBILE.APNS_PASSBOOK_SANDBOX.TTL
AWS.SNS.MOBILE.APNS_SANDBOX.TTL
AWS.SNS.MOBILE.APNS_VOIP.TTL
AWS.SNS.MOBILE.APNS_VOIP_SANDBOX.TTL
AWS.SNS.MOBILE.APNS.COLLAPSE_ID
AWS.SNS.MOBILE.APNS.PRIORITY
AWS.SNS.MOBILE.APNS.PUSH_TYPE
AWS.SNS.MOBILE.APNS.TOPIC
AWS.SNS.MOBILE.APNS.TTL

Baidu

AWS.SNS.MOBILE.BAIDU.DeployStatus
AWS.SNS.MOBILE.BAIDU.MessageKey
AWS.SNS.MOBILE.BAIDU.MessageType
AWS.SNS.MOBILE.BAIDU.TTL
FCM AWS.SNS.MOBILE.FCM.TTL
AWS.SNS.MOBILE.GCM.TTL
macOS AWS.SNS.MOBILE.MACOS_SANDBOX.TTL
AWS.SNS.MOBILE.MACOS.TTL

MPNS

AWS.SNS.MOBILE.MPNS.NotificationClass
AWS.SNS.MOBILE.MPNS.TTL

AWS.SNS.MOBILE.MPNS.Type

WNS AWS.SNS.MOBILE.WNS.CachePolicy
AWS.SNS.MOBILE.WNS.Group
AWS.SNS.MOBILE.WNS.Match
AWS.SNS.MOBILE.WNS.SuppressPopup
AWS.SNS.MOBILE.WNS.Tag
AWS.SNS.MOBILE.WNS.TTL
AWS.SNS.MOBILE.WNS.Type

1 如果消息属性不符合要求,Apple 将拒绝 Amazon SNS 通知。有关其他详细信息,请参阅 Apple 开发人员网站上的向 APN 发送通知请求