View a markdown version of this page

使用 Amazon SNS 發佈大型訊息 - Amazon Simple Notification Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon SNS 發佈大型訊息

當您設定MaximumMessageSize主題屬性時,Amazon SNS 最多支援 1 MiB (1,048,576 位元組) 的訊息承載。根據預設, 主題接受高達 256 KiB 的訊息。MaximumMessageSize 設定超過 256 KiB 的主題支援 Amazon Data Firehose、Amazon SQS 和 AWS Lambda 訂閱,每個主題總計最多 100 個訂閱。

發佈大型訊息的運作方式

您可以將MaximumMessageSize主題屬性設定為介於 1,024 和 1,048,576 位元組之間的任何整數值。根據預設,所有現有和新建立的主題MaximumMessageSize都有 262,144 個位元組 (256 KiB)。

當您發佈訊息時,Amazon SNS 會根據主題設定的 ,驗證訊息內文和訊息屬性的合併大小MaximumMessageSize。如果合併大小超過限制,Amazon SNS 會在發佈時傳回InvalidParameter錯誤。

支援的組態

當您設定MaximumMessageSize超過 256 KiB 時,Amazon SNS 支援下列組態。

訂閱限制

主題最多支援 100 個訂閱。如果您嘗試建立其他訂閱,Amazon SNS 會傳回InvalidParameter錯誤。

支援的端點類型

MaximumMessageSize 超過 256 KiB 的主題支援下列端點類型:

  • Amazon Data Firehose

  • Amazon SQS

  • AWS Lambda

在 MaximumMessageSize 256 KiB 或以下的 主題也支援 HTTP/HTTPS、SMS、電子郵件、電子郵件 json 和行動推播 (應用程式) 端點。

在現有主題上設定 MaximumMessageSize

MaximumMessageSize 您可以隨時增加或減少主題的 。變更值後,Amazon SNS 會根據更新的限制驗證新的發佈請求。

若要設定MaximumMessageSize超過 256 KiB,主題的總訂閱數必須為 100 個或更少,所有訂閱都必須是支援的端點類型 (Amazon Data Firehose、Amazon SQS 或 AWS Lambda)。如果主題具有不支援的端點類型或超過 100 個訂閱,Amazon SNS 會傳回InvalidParameter錯誤。

針對大型訊息設定您的主題

使用 AWS 管理主控台

設定您的主題以發佈較大的訊息
  1. 開啟位於 https://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 APIs。您不需要新的 API 操作。

API 變更
CreateTopic 在 Attributes 參數MaximumMessageSize中接受 。有效範圍:1,024–1,048,576 位元組。
SetTopicAttributes 接受 MaximumMessageSize 做為屬性名稱。
GetTopicAttributes MaximumMessageSize 如果屬性已明確設定,則傳回 。如果未傳回,主題會使用預設值 262,144 位元組 (256 KiB)。
Publish 根據主題的 驗證訊息內文和訊息屬性的合併大小MaximumMessageSize。
PublishBatch 根據主題的 驗證批次中所有訊息的合併大小 (每個訊息的內文和屬性)MaximumMessageSize。

端點相容性

下列清單說明 Amazon SNS 如何將您的大型訊息傳遞至每個支援的端點類型。

  • Amazon Data Firehose – Amazon Data Firehose 會將串流資料載入資料存放區和分析服務。它支援高達 1,000 KiB (1,024,000 位元組) 的記錄。交付的訊息必須低於此限制。限制包括 Amazon SNS 交付中繼資料,例如訊息 ID 和時間戳記。超過限制的訊息失敗交付。主題的 MaximumMessageSize最多可設定 1,024 KiB (1,048,576 位元組)。因此,我們建議您MaximumMessageSize為具有 Firehose 訂閱的主題設定較低的 。如需目前的記錄大小限制,請參閱 Amazon Data Firehose 配額。

  • Amazon SQS – Amazon SNS 可以將訊息傳遞至訂閱的 Amazon SQS 佇列,最多可達 Amazon SQS 支援的訊息大小上限。佇列本身MaximumMessageSize不適用於來自 Amazon SNS 的訊息。Amazon SNS 主題的 MaximumMessageSize是這些訊息的有效大小限制。

  • AWS Lambda – Amazon SNS 會以非同步方式叫用 AWS Lambda 函數。 AWS Lambda 支援高達 1 MiB 的非同步叫用承載。 AWS Lambda 訂閱不需要額外的組態。

最佳實務

設定無效字母佇列

我們建議在所有訂閱上設定無效字母佇列 (DLQ),以處理失敗的訊息傳遞。DLQ 會擷取 Amazon SNS 無法成功交付至訂閱端點的訊息,讓您檢查並重新處理。如需詳細資訊,請參閱Amazon SNS 無效字母佇列。

使用 CloudWatch 指標和警示進行監控

使用 CloudWatch 指標來監控訊息傳遞,並在失敗的傳遞上設定警示。NumberOfNotificationsFailed 指標會追蹤 Amazon SNS 無法傳遞至訂閱端點的訊息。在此指標上建立 CloudWatch 警示,以在交付失敗時接收警示。如需詳細資訊,請參閱使用 Amazon CloudWatch 監控 Amazon SNS 主題。

使用 Amazon S3 發佈大於 1 MiB 的訊息

若要發佈大於 1 MiB 的訊息,請使用適用於 Java 的 Amazon SNS 延伸用戶端程式庫或適用於 Python 的 Amazon SNS 延伸用戶端程式庫,在 Amazon S3 中存放承載,並透過 Amazon SNS 發佈參考。這些程式庫支援高達 2 GB 的訊息,並且與標準和 FIFO 主題相容。如需在選擇此方法MaximumMessageSize之前增加 的說明,請參閱 針對大型訊息設定您的主題。