

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

# FIFO 主題訂閱者的 Amazon SNS 訊息重播
<a name="message-archiving-and-replay-subscriber"></a>

Amazon SNS 重播可讓主題訂閱者從主題資料存放區擷取封存的訊息，並重新傳遞至訂閱的端點。
+ 訂閱建立後立即重播訊息。
+ 重播的訊息會保留`Timestamp`與原始訊息相同的內容 `MessageId`和 。
+ 訊息包含`Replayed`屬性，表示它是重播的訊息。
+ 若要僅重播特定訊息，請將篩選政策套用至您的訂閱。

如需更多篩選訊息的資訊，請參閱 [篩選重播的訊息](#message-archiving-and-replay-subscription-filtering)。

## 使用 建立訊息重播政策 AWS 管理主控台
<a name="message-archiving-and-replay-replaying-console"></a>

使用此選項即可使用 AWS 管理主控台來建立新的重播政策。

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/sns/home)。

1. 選擇主題訂閱或建立新的主題訂閱。若要進一步了解如何建立訂閱，請參閱 [建立 Amazon SNS 主題的訂閱](sns-create-subscribe-endpoint-to-topic.md)。

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

1. 從**重新播放時間**互動視窗進行下列選擇：

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

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

   1. 選擇**開始重新播放**。

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

1. (選用) 若要使用 CloudWatch 在此工作流程內**監控**訊息重播指標，請參閱 [使用 Amazon CloudWatch 監控訊息重播指標](#message-archiving-and-replay-subscription-cloudwatch)。

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

您可以從**訂閱詳細資訊**頁面執行下列動作：
+ 若要**檢視**訊息重播狀態，**重新播放狀態**欄位會顯示下列值：
  + **已完成** - 重播已成功重新傳遞所有訊息，且現在正在傳遞新發佈的訊息。
  + **進行中** - 重播目前正在重播選取的訊息。
  + **失敗** - 重播無法完成。
  + **待定** - 重播啟動時的預設狀態。
+ (選用) 若要**修改**訊息重播政策，請前往**訂閱詳細資訊**頁面，然後從**重新播放**下拉式清單中選擇**開始重新播放**。開始重播將會取代現有的重播。

## 使用 API 新增重播政策至訂閱
<a name="message-archiving-and-replay-subscription-api"></a>

若要重播封存的訊息，請使用屬性 `ReplayPolicy`。`ReplayPolicy` 可搭配 `Subscribe` 和 `SetSubscriptionAttributes` 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 新增重播政策至訂閱
<a name="message-replay-sdk"></a>

若要使用 AWS SDK，您必須使用登入資料進行設定。如需詳細資訊，請參閱 SDK [`config`和工具參考指南中的共用 和 `credentials` 檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。 * 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
<a name="message-archiving-and-replay-understanding-endpoint"></a>

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

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

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

## 篩選重播的訊息
<a name="message-archiving-and-replay-subscription-filtering"></a>

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

## 使用 Amazon CloudWatch 監控訊息重播指標
<a name="message-archiving-and-replay-subscription-cloudwatch"></a>

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


| 指標 | Description | 
| --- | --- | 
|  **NumberOfReplayedNotificationsDelivered**  |  以 1 分鐘解析度，為訂閱用戶提供從主題封存重播的彙總訊息數。  | 
|  **NumberOfReplayedNotificationsFailed**   |  以 1 分鐘解析度，為訂閱用戶提供從主題封存傳遞失敗的重播彙總訊息數。  | 