

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

# Amazon SNS
<a name="sns"></a>

[Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 可讓您建立標準和 FIFO 主題。主題用於實作發佈/訂閱 (pub/sub) 架構。Amazon SNS 支援各種訂閱類型，包括電子郵件、SMS （假設您已設定起始身分，例如免付費電話號碼或 10 位數長碼）、HTTP(S) 端點和 SQS 佇列。**訂閱者必須確認** SNS 主題的最終使用者訂閱，例如電子郵件訊息和簡訊。Amazon SNS 可讓服務廣泛*散發*，這表示單一訊息可以傳遞給可能大量的訂閱者。SNS 標準主題的預設限制為 1，250 萬個訂閱。

在微服務環境中，SNS 主題適用於從發佈者解耦訊息路由和交付邏輯。這可以透過使用主題篩選條件來實作。概念上，主題篩選條件與 Amazon EventBridge 規則略有相似，但它們是為每個訂閱者設定的，而不是從集中位置提供。例如，假設您有：
+ Order 服務，可處理訂單。
+ 履行服務，可處理訂單履行。
+ 忠誠度服務，可授予會員訂單的忠誠度點數。

當訂單已準備好履行時，它會發佈訊息到主題。Fulfillment 服務會訂閱主題，但不會套用篩選條件，因為它想要了解所有訂單。假設您有一個忠誠度服務，該服務負責在成員下訂單時將點數授予他們。不過，並非所有訂單都是由成員下單。忠誠度服務會訂閱主題，但會實作訂閱篩選條件來檢查屬性，指出訂單是針對成員還是訪客。

假設系統收到最終使用者的付款請求，如下圖所示。在這種情況下，多個下游系統需要知道已提出請求，才能採取各種動作。當您使用 Amazon SNS 時，付款會發佈至 SNS 主題，而 Lambda 函數會訂閱主題以更新客戶和銷售資料庫。此外，電子郵件訂閱 （必須由客戶確認） 會使用訂閱篩選條件傳送電子郵件確認給客戶。

![在微服務中傳送訊息的 Amazon SNS 程序流程。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/modernization-integrating-microservices/images/sns-process-flow.png)


## 指引
<a name="sns-guidance"></a>

本節中針對 Amazon SNS 所述的部分功能與事件匯流排所提供的功能重疊，例如 EventBridge。考慮在以下情況下使用 Amazon SNS：
+ 您將有大量訂閱者加入主題。
+ 您想要使用 EventBridge 原生不支援的訂閱類型 （例如電子郵件或簡訊）。
+ 訂閱者應該能夠判斷其訂閱篩選條件。
+ 您需要按順序交付給訂閱者 （每個訊息群組）。

如果您有許多主題，而且訂閱和篩選條件用於在微服務之間路由訊息，則 EventBridge 可能是更好的選擇。