View a markdown version of this page

使用 Amazon SNS 发布大型消息 - Amazon Simple Notification Service

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

使用 Amazon SNS 发布大型消息

当您配置主题属性时,亚马逊 SNS 支持高达 1 MiB(1,048,576 字节)的消息有效载荷。MaximumMessageSize默认情况下,主题接受最大为 256 KiB 的消息。MaximumMessageSize设置在 256 KiB 以上的主题支持 Amazon Data Firehose、亚马逊 SQS 和 AWS Lambda 订阅,每个主题的总订阅量高达 100 个。

发布大型消息的工作原理

您可以将MaximumMessageSize主题属性设置为 1,024 到 1,048,576 字节之间的任何整数值。默认情况下,所有现有和新创建MaximumMessageSize的主题均为 262,144 字节 (256 KiB)。

当您发布消息时,Amazon SNS 会根据主题的配置来验证消息正文和消息属性的总大小。MaximumMessageSize如果合并大小超过限制,Amazon SNS 会在发布时返回InvalidParameter错误。

支持的配置

当您将设置为 256 KiB MaximumMessageSize 以上时,亚马逊 SNS 支持以下配置。

订阅限制

该主题最多支持 100 个订阅。如果您尝试创建其他订阅,Amazon SNS 会返回InvalidParameter错误。

支持的终端节点类型

大MaximumMessageSize于 256 KiB 的主题支持以下端点类型:

  • Amazon Data Firehose

  • Amazon SQS

  • AWS Lambda

256 KiB 或以下的主题还支持 SMS、电子邮件 HTTP/HTTPS、email-json 和移动推送(应用程序)终端节MaximumMessageSize点。

MaximumMessageSize 对现有主题进行设置

您可以MaximumMessageSize随时增加或减少主题。更改该值后,Amazon SNS 会根据更新的限制验证新的发布请求。

要设置为 256 KiB MaximumMessageSize 以上,该主题的订阅总数必须不超过 100 个,所有这些终端节点都必须是支持的终端节点类型(Amazon Data Firehose、Amazon SQS 或)。 AWS Lambda如果该主题的终端节点类型不受支持或订阅超过 100 个,则 Amazon SNS 会返回错误InvalidParameter。

为大型消息配置主题

使用 AWS 管理控制台

将您的主题配置为发布更大的消息
  1. 从 https://console.aws.amazon.com/sns/home 打开 Amazon SNS 控制台。

  2. 在左侧导航窗格中,选择主题。

  3. 选择您的主题,然后选择 “编辑” 。

  4. 在 “最大邮件大小” 下,设置所需的上限(最多 1,024 KiB)。

  5. 选择保存更改。

使用 AWS CLI

创建新主题MaximumMessageSize时设置:

aws sns create-topic \ --name my-large-message-topic \ --attributes MaximumMessageSize=1048576

my-large-message-topic替换为您的主题名称和1048576所需的最大消息大小(以字节为单位)。

MaximumMessageSize在现有主题上设置:

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-east-1:123456789012:my-topic \ --attribute-name MaximumMessageSize \ --attribute-value 1048576

arn:aws:sns:us-east-1:123456789012:my-topic替换为主题的 ARN 和所需的最大消息大小(1048576以字节为单位)。

验证您的主题是当前的MaximumMessageSize。如果未明确设置该属性,则该属性不会出现在响应中,并且该主题使用默认值 262,144 字节 (256 KiB)。

aws sns get-topic-attributes \ --topic-arn arn:aws:sns:us-east-1:123456789012:my-topic

适用于大型消息的 Amazon SNS API 参考

大型消息支持使用现有的 Amazon SNS API。你不需要新的 API 操作。

API 更改
CreateTopic 在Attributes参数MaximumMessageSize中接受。有效范围:1,024—1,048,576 字节。
SetTopicAttributes 接受MaximumMessageSize作为属性名称。
GetTopicAttributes MaximumMessageSize如果已明确设置该属性,则返回。如果未返回,则该主题使用默认值 262,144 字节 (256 KiB)。
Publish 根据主题验证消息正文和消息属性的组合大小。MaximumMessageSize
PublishBatch 根据主题验证批次中所有消息(每条消息的正文和属性)的总大小。MaximumMessageSize

端点兼容性

以下列表介绍了 Amazon SNS 如何将您的大型消息传送到每种支持的终端节点类型。

  • 亚马逊数据消防站 ——亚马逊数据消防站将流数据加载到数据存储和分析服务中。它支持高达 1,000 KiB(1,024,000 字节)的记录。传送的消息必须保持在该限制以下。该限制包括 Amazon SNS 传输元数据,例如消息 ID 和时间戳。超过限制的邮件无法传送。一个主题最多MaximumMessageSize可以设置为 1,024 KiB(1,048,576 字节)。因此,我们建议您将订阅了 Firehose MaximumMessageSize 的主题设置得更低。有关当前的记录大小限制,请参阅亚马逊 Data Firehose 配额。

  • 亚马逊 SQS — 亚马逊 SNS 可以将消息传送到已订阅的 Amazon SQS 队列,最高可达亚马逊 SQS 支持的最大消息大小。队列本身MaximumMessageSize不适用于来自 Amazon SNS 的消息。亚马逊 SNS 主题MaximumMessageSize是这些消息的有效大小限制。

  • AWS Lambda— 亚马逊 SNS 异步调用函数。 AWS Lambda AWS Lambda 支持高达 1 MiB 的异步调用有效负载。 AWS Lambda 订阅不需要额外的配置。

最佳实践

配置死信队列

我们建议在所有订阅上配置死信队列 (DLQ) 以处理失败的消息传送。DLQ 捕获 Amazon SNS 无法成功传送到订阅的终端节点的消息,允许您检查和重新处理这些消息。有关更多信息,请参阅 Amazon SNS 死信队列。

使用 CloudWatch 指标和警报进行监控

使用 CloudWatch 指标监控消息传送并设置传送失败警报。该NumberOfNotificationsFailed指标追踪 Amazon SNS 无法发送到订阅终端节点的消息。针对该指标创建 CloudWatch 警报,以便在发生交付失败时接收警报。有关更多信息,请参阅 使用监控亚马逊 SNS 主题 CloudWatch。

使用 Amazon S3 发布大于 1 MiB 的消息

要发布大于 1 MiB 的消息,请使用适用于 Java 的 Amazon SNS 扩展客户端库或适用于 Python 的 Amazon SNS 扩展客户端库将有效负载存储在 Amazon S3 中,并通过 Amazon SNS 发布参考文献。这些库支持最大 2 GB 的消息,并且与标准和 FIFO 主题兼容。有关在选择此方法MaximumMessageSize之前增加的说明,请参阅为大型消息配置主题。