

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

[Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 允许您创建标准主题和 FIFO 主题。主题用于实施发布/订阅（pub/sub）架构。Amazon SNS 支持多种订阅类型，包括电子邮件、短信（假设您已配置发起身份，例如免费电话号码或 10 位长代码）、HTTP（S）端点和 SQS 队列。最终用户对 SNS 主题的订阅（例如电子邮件和短信）**必须由订阅用户确认**。Amazon SNS 可助力服务广泛*分发*消息，这意味着单条消息可发送给潜在的大量订阅用户。SNS 标准主题的默认订阅限制为 1250 万。

在微服务环境中，SNS 主题有助于将消息路由和传送逻辑与发布者解耦。这可以通过使用主题筛选器来实现。从概念上讲，主题筛选器与 Amazon EventBridge 规则有些相似，但它们是为每个订阅用户配置的，并非从一个集中位置提供。例如，假设您有：
+ 订单服务，用于处理订单。
+ 配送服务，用于处理订单配送。
+ 忠诚度服务，为会员的订单奖励忠诚度积分。

当订单准备好发货时，会向主题发布一则消息。配送服务订阅了该主题，但没有应用筛选器，因其想了解所有订单。想象一下，您有一项忠诚度服务，负责在会员下单时向他们奖励积分。但是，并非所有订单都是会员下的。忠诚度服务将订阅该主题，但会实施订阅筛选器，以检查指示是会员订单还是访客订单的属性。

考虑一下系统收到最终用户发起付款请求时的情况，如下图所示。这种情况下，多个下游系统需要知道请求已发出，以便采取相应措施。当您使用 Amazon SNS 时，付款将发布到某个 SNS 主题，Lambda 函数会订阅该主题以更新客户和销售数据库。此外，电子邮件订阅功能（须客户确认）会通过订阅筛选器向客户发送确认邮件。

![Amazon SNS 在微服务中传送消息的流程图。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/modernization-integrating-microservices/images/sns-process-flow.png)


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

此部分所述的 Amazon SNS 部分功能与事件总线（如 EventBridge）提供的功能存在重叠。考虑在以下情况下使用 Amazon SNS：
+ 一个主题将拥有大量订阅用户。
+ 您想使用 EventBridge 本身不支持的订阅类型（例如电子邮件或短信）。
+ 订阅用户应该能够确定他们的订阅筛选器。
+ 您需要按顺序发送消息给订阅用户（按消息组）。

若有许多主题，且需通过订阅和筛选器在微服务间路由消息，EventBridge 通常是更优选择。