FIFO 主題訂閱者的 Amazon SNS 訊息重播 - Amazon Simple Notification Service

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

FIFO 主題訂閱者的 Amazon SNS 訊息重播

Amazon SNS 重播可讓主題訂閱者從主題資料存放區擷取封存的訊息,並重新傳遞至訂閱的端點。

  • 訂閱建立後,即可立即重播訊息。

  • 重播的訊息會保留Timestamp與原始訊息相同的內容 MessageId和 。

  • 訊息包含Replayed屬性,以表示它是重播的訊息。

  • 若要僅重播特定訊息,請將篩選政策套用至您的訂閱。

如需更多篩選訊息的資訊,請參閱 篩選重播的訊息

使用 建立訊息重播政策 AWS Management Console

使用此選項即可使用 AWS Management Console來建立新的重播政策。

  1. 登入 Amazon SNS 主控台

  2. 選擇主題訂閱或建立新的主題訂閱。若要進一步了解如何建立訂閱,請參閱 建立 Amazon SNS 主題的訂閱

  3. 若要啟動訊息重播,請前往重播下拉式清單,然後選擇開始重新播放

  4. 重新播放時間互動視窗進行下列選擇:

    1. 選擇重播開始日期和時間 - 選擇要開始重播封存訊息的日期 (YYYY/MM/DD 格式) 和時間 (24 小時 hh:mm:ss 格式)。開始時間應晚於大約的封存時間開頭。

    2. (選用) 選擇重播結束日期和時間 - 選擇要停止重播封存訊息的日期 (YYYY/MM/DD 格式) 和時間 (24 小時 hh:mm:ss 格式)。

    3. 選擇開始重新播放

  5. (選用) 若要停止訊息重播,請前往訂閱詳細資訊頁面,然後從重新播放下拉式清單中選擇停止重新播放

  6. (選用) 若要使用 CloudWatch 在此工作流程內監控訊息重播指標,請參閱 使用 Amazon CloudWatch 監控訊息重播指標

若要檢視和編輯訊息重播政策

您可以從訂閱詳細資訊頁面執行下列動作:

  • 若要檢視訊息重播狀態,重新播放狀態欄位會顯示下列值:

    • 已完成 - 重播已成功重新傳遞所有訊息,且現在正在傳遞新發佈的訊息。

    • 進行中 - 重播目前正在重播選取的訊息。

    • 失敗 - 重播無法完成。

    • 待定 - 重播啟動時的預設狀態。

  • (選用) 若要修改訊息重播政策,請前往訂閱詳細資訊頁面,然後從重新播放下拉式清單中選擇開始重新播放。開始重播將會取代現有的重播。

使用 API 新增重播政策至訂閱

若要重播封存的訊息,請使用屬性 ReplayPolicyReplayPolicy 可搭配 SubscribeSetSubscriptionAttributes API 動作使用。此政策包括下列值:

  • StartingPoint (必要) - 指出從何處開始重播訊息。

  • EndingPoint (選用) - 指出何時停止重播訊息。如果省略 EndingPoint,則重播將繼續進行,直到趕上目前時間為止。

  • PointType (必要) - 設定起點和終點的類型。目前 PointType 支援的值為 Timestamp

例如,若要在 2023 年 10 月 1 日從下游失敗復原,並且重新傳送 2 小時期間的所有訊息,請使用 SetSubscriptionAttributes API 動作來設定 ReplayPolicy,如下所示:

{ "PointType":"Timestamp", "StartingPoint":"2023-10-01T10:00:00.000Z", "EndingPoint":"2023-10-01T12:00:00.000Z" }

若要重播 2023 年 10 月 1 日起傳送至該主題的所有訊息,並繼續接收所有新發佈至您的主題的訊息,請使用 SetSubscriptionAttributes API 動作在您的訂閱上設定 ReplayPolicy,如下所示:

{ "PointType":"Timestamp", "StartingPoint":"2023-10-01T00:00:00.000Z" }

為了確認訊息是否已重播,會將布林值屬性 Replayed 新增至每一則重播的訊息。

使用 SDK 新增重播政策至訂閱

若要使用 AWS 開發套件,您必須使用 登入資料進行設定。如需詳細資訊,請參閱 SDK config和工具參考指南中的共用 和 credentials 檔案 AWS SDKs

下列程式碼範例示範如何在訂閱上設定 ReplayPolicy,以便在 2023 年 10 月 1 日從 Amazon SNS FIFO 主題的封存重新傳遞 2 小時時段的訊息。

// Specify the ARN of the Amazon SNS subscription to initiate the ReplayPolicy on. String subscriptionArn = "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo:1d2a3e9d-7f2f-447c-88ae-03f1c68294da"; // Set the ReplayPolicy to replay messages from the topic's archive // for a 2 hour time period on October 1st 2023 between 10am and 12pm UTC. String replayPolicy = "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"2023-10-01T10:00:00.000Z\",\"EndingPoint\":\"2023-10-01T12:00:00.000Z\"}"; // Set the ArchivePolicy for the Amazon SNS topic SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest() .withSubscriptionArn(subscriptionArn) .withAttributeName("ReplayPolicy") .withAttributeValue(replayPolicy); sns.setSubscriptionAttributes(request);

了解 EndingPoint

當您ReplayPolicy將 套用至 Amazon SNS 訂閱時,該EndingPoint值為選用。如果未EndingPoint提供任何 ,則重播會從指定的 開始StartingPoint,並持續到目前為止,包括處理任何新發佈的訊息。趕上進度後,訂閱將做為一般訂閱運作,並在發佈新訊息時接收新訊息。

如果指定 EndingPoint ,服務將從 重播訊息,StartingPoint直到 EndingPoint,然後停止。此動作會有效地暫停訂閱。當訂閱暫停時,新發佈的訊息將不會傳遞到訂閱的端點。

若要繼續訊息傳遞,請套用新的 ReplayPolicy而不提供 EndingPoint,並將 StartingPoint 設定為要繼續接收訊息的所需時間點。例如,若要從先前重播完成的位置繼續訂閱,請將新 StartingPoint 設定為先前提供的 EndingPoint

篩選重播的訊息

Amazon SNS 訊息篩選可讓您控制 Amazon SNS 對訂閱用戶端點重播的訊息。訊息篩選和訊息封存同時啟用時,Amazon SNS 會先從主題的資料存放區擷取訊息,再對訂閱的 FilterPolicy 套用訊息。若有相符項目,訊息就會傳遞至訂閱的端點,否則訊息會被篩選掉。如需詳細資訊,請參閱Amazon SNS 訂閱篩選政策

使用 Amazon CloudWatch 監控訊息重播指標

您可以使用下列指標與 Amazon CloudWatch 監控重播訊息。若要收到工作負載異常的通知並協助避免受到影響,您可以對這些指標設定 Amazon CloudWatch 警示。如需詳細資訊,請參閱在 Amazon SNS 中記錄和監控

指標 描述

NumberOfReplayedNotificationsDelivered

以 1 分鐘解析度,為訂閱用戶提供從主題封存重播的彙總訊息數。

NumberOfReplayedNotificationsFailed

以 1 分鐘解析度,為訂閱用戶提供從主題封存傳遞失敗的重播彙總訊息數。