

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

# FIFO 主題的 Amazon SNS 訊息耐久性
<a name="fifo-message-durability"></a>

Amazon SNS FIFO 主題和 Amazon SQS 佇列是耐用的。這兩種資源類型會在多個可用區域間冗餘儲存郵件，並提供無效字母佇列以處理例外情況。

在 Amazon SNS 中，當因用戶端或伺服器端錯誤而造成 Amazon SNS 主題無法存取訂閱的 Amazon SQS 佇列時，訊息傳遞就會失敗：
+ 當 Amazon SNS FIFO 主題有過時的訂閱中繼資料時，就會發生用戶端錯誤。用戶端錯誤的兩個常見原因是 Amazon SQS 佇列擁有者執行下列其中一項作業時：
  + 刪除佇列。
  + 以防止 Amazon SNS 服務主體傳遞訊息的方式變更佇列政策。

  Amazon SNS 不會重試傳遞因用戶端錯誤而失敗的訊息。
+ 伺服器端錯誤可能會發生在下列情況：
  + Amazon SQS 服務無法使用。
  + Amazon SQS 無法處理來自 Amazon SNS 服務的有效請求。

  發生伺服器端錯誤時，Amazon SNS FIFO 主題會在 23 天內最多重試失敗的傳遞 100,015 次。如需詳細資訊，請參閱[Amazon SNS 訊息傳遞重試](sns-message-delivery-retries.md)。

對於任何類型的錯誤，Amazon SNS 可以將訊息旁邊傳送到 Amazon SQS 無效字母佇列，因此資料不會遺失。

在 Amazon SQS 中，當消費者應用程式無法接收訊息、處理訊息並從佇列中刪除訊息時，訊息處理會失敗。當接收請求數目上限失敗時，Amazon SQS 可以將訊息旁邊傳送至無效字母佇列，因此資料不會遺失。

在[汽車零件價格管理範例使用案例](fifo-example-use-case.md)中，公司可以為每個 Amazon SNS FIFO 主題訂閱指派 Amazon SQS 無效字母佇列 (DLQ)，以及每個訂閱的 Amazon SQS 佇列。這可以保護公司免受任何價格更新損失。

![\[無效字母佇列 (DLQs) 如何與 Amazon SNS FIFO 主題和 Amazon SQS 佇列整合，以確保自動組件價格管理系統中訊息可靠性的範例。它會顯示設定，其中每個用於批發、零售和分析目的的 Amazon SNS FIFO 訂閱都與對應的 Amazon SQS FIFO 或標準佇列配對，每個佇列都配備自己的類型比對 DLQ，以防止因處理失敗而導致訊息遺失。\]](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/images/sns-fifo-dlq.png)


Amazon SNS 訂閱相關聯的無效字母佇列必須是與訂閱佇列類型相同的 Amazon SQS 佇列。例如，Amazon SQS FIFO 佇列的 Amazon SNS FIFO 訂閱必須將 Amazon SQS FIFO 佇列作為無效字母佇列。同樣，Amazon SQS 標準佇列的 Amazon SNS FIFO 訂閱必須將 Amazon SQS 標準佇列作為其無效字母佇列。如需詳細資訊，請參閱 *AWS 運算部落格*上的 [Amazon SNS 無效字母佇列](sns-dead-letter-queues.md) 與[為 Amazon SNS、Amazon SQS、 AWS Lambda使用 DLQ 設計耐用的無伺服器應用程式](https://aws.amazon.com/blogs/compute/designing-durable-serverless-apps-with-dlqs-for-amazon-sns-amazon-sqs-aws-lambda/ )文章。

為了延長耐久性以協助從下游失敗中復原，主題擁有者也可以使用 FIFO 主題來封存訊息長達 365 天。主題訂閱用戶接著就可以對訂閱的端點重播這些訊息，以復原因下游應用程式失敗而遺失的訊息，或複寫現有應用程式的狀態。如需更多資訊，請參閱 [FIFO 主題的 Amazon SNS 訊息封存和重播](fifo-message-archiving-replay.md)。