View a markdown version of this page

Amazon SNS 原始訊息交付 - Amazon Simple Notification Service

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

Amazon SNS 原始訊息交付

為了避免 散發到 Firehose 交付串流Amazon SQSHTTP/S 端點處理訊息的 JSON 格式,Amazon SNS 允許原始訊息傳遞:

  • 當您為 或 Amazon SQS 端點啟用原始訊息交付時,任何 Amazon SNS 中繼資料都會從發佈的訊息中分割,並依原狀傳送訊息。

  • 當您啟用 HTTP/S 端點的原始訊息交付時,值設為 x-amz-sns-rawdelivery 的 HTTP 標頭 true 會加入至訊息中,表示該訊息已在沒有 JSON 格式設定的情況下發佈。

  • 當您啟用 HTTP/S 端點的原始訊息交付時,會交付訊息本文、用户端 IP 和所需的標頭。當您指定訊息屬性時,系統不會傳送該訊息。

  • 當您為 Firehose 端點啟用原始訊息交付時,會交付訊息內文。當您指定訊息屬性時,系統不會傳送該訊息。

若要使用 AWS SDK 啟用原始訊息傳遞,您必須使用 SetSubscriptionAttribute API 動作,並將 RawMessageDelivery 屬性的值設定為 true

使用 啟用原始訊息傳遞 AWS Management Console

  1. 登入 Amazon SNS 主控台

  2. 在導覽面板上,選擇 Topics (主題)

  3. 主題頁面上,選擇訂閱 Firehose、Amazon SQS 或 HTTP/S 端點的主題。

  4. MyTopic (我的主題) 頁面上,於 Subscription (訂閱) 區段內,選擇訂閱並選擇 Edit (編輯)

  5. Edit EXAMPLE1-23bc-4567-d890-ef12g3hij456 (編輯範例1-23bc-4567-d890-ef12g3hij456) 頁面上,於 Details (詳細資訊) 區段內,選擇 Enable raw message delivery (啟用原始訊息交付)

  6. 選擇儲存變更

訊息格式範例

在下列範例中,相同的訊息會傳送到相同的 Amazon SQS 佇列兩次。唯一的差異是第一封郵件的原始訊息交付會停用,第二封郵件則會啟用。

  • 原始訊息交付停用

    { "Type": "Notification", "MessageId": "dc1e94d9-56c5-5e96-808d-cc7f68faa162", "TopicArn": "arn:aws:sns:us-east-2:111122223333:ExampleTopic1", "Subject": "TestSubject", "Message": "This is a test message.", "Timestamp": "2021-02-16T21:41:19.978Z", "SignatureVersion": "1", "Signature": "FMG5tlZhJNHLHUXvZgtZzlk24FzVa7oX0T4P03neeXw8ZEXZx6z35j2FOTuNYShn2h0bKNC/zLTnMyIxEzmi2X1shOBWsJHkrW2xkR58ABZF+4uWHEE73yDVR4SyYAikP9jstZzDRm+bcVs8+T0yaLiEGLrIIIL4esi1llhIkgErCuy5btPcWXBdio2fpCRD5x9oR6gmE/rd5O7lX1c1uvnv4r1Lkk4pqP2/iUfxFZva1xLSRvgyfm6D9hNklVyPfy+7TalMD0lzmJuOrExtnSIbZew3foxgx8GT+lbZkLd0ZdtdRJlIyPRP44eyq78sU0Eo/LsDr0Iak4ZDpg8dXg==", "SigningCertURL": "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem", "UnsubscribeURL": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:111122223333:ExampleTopic1:e1039402-24e7-40a3-a0d4-797da162b297" }
  • 原始訊息交付啟用

    This is a test message.

Amazon SQS 訂閱的訊息屬性和原始訊息傳遞

Amazon SNS 支援訊息屬性的傳遞,可讓您提供有關訊息的結構化中繼資料項目,例如時間戳記、地理空間資料、簽章和識別符。對於啟用原始訊息傳遞的 Amazon SQS 訂閱,最多可傳送 10 個訊息屬性。若要傳送超過 10 個訊息屬性,您必須停用原始訊息傳遞。不過,Amazon SNS 會捨棄具有超過 10 個訊息屬性的訊息,這些屬性導向已啟用原始訊息交付的 Amazon SQS 訂閱,並將它們視為用戶端錯誤。