在本教程中,您将使用 Amazon Simple Notification Service (SNS)Amazon Simple Queue Service (SQS) 实施扇出消息收发场景。在此场景中,消息会被“推送”给多个订阅者,无需通过定期检查或轮询获取更新,且系统能够按订阅者并行异步处理消息。

为了对此进行说明,我们将假定您要开发一个原生云应用程序,每当有人在在线商店中下单时,该应用程序都会向某个主题发送一条 Amazon SNS 消息。每个订阅相应主题的 Amazon SQS 队列都会收到关于新订单的完全相同通知。

您在本教程中使用的 AWS 服务包含在 AWS 免费套餐中。

必须有账户才能在 AWS 上发送扇出事件通知

创建免费账户

AWS 免费套餐包括 1000000 个 Amazon Simple Notification Service 发布和 1000000 个 Amazon Simple Queue Service 请求。

查看 AWS 免费套餐详细信息 »

 

在您单击此处后,AWS 管理控制台会在新的浏览器窗口中打开,这样本分步指南就能一直保持打开状态。此屏幕加载后,请输入您的用户名和密码以便开始操作。然后在搜索栏中键入 notification 并选择 Simple Notification Service 以打开服务控制台。

tmt_send-fanout-event-notifications_1a

(单击可缩放)

tmt_send-fanout-event-notifications_1a

a. 如果 SNS 控制台登录页显示,请单击“下一步”

1a-sns-console-home

(单击可缩放)

1a-sns-console-home

在此步骤中,您将创建 Amazon SNS 主题。主题是发送消息和订阅通知的通信通道。在此示例中,每当有人在在线商店中下新订单时,示例电子商务应用程序就会将消息推送到 Amazon SNS 主题。 


a.  在“创建主题”页中的主题名称框中,键入“New-Orders”,然后单击“创建主题”

2a-topic-create-wf

(单击可缩放)

2a-topic-create-wf

b. “主题详细信息”页确认主题已成功创建。

2b-topic-create-confirm

(单击可缩放)

2b-topic-create-confirm

您已经使用 Amazon SNS 创建了主题,接下来将创建订阅该主题的 Amazon SQS 队列。

如果您为多个队列订阅某个主题,则每当有消息推送到该主题时,所有队列都会收到相同的通知。然后,附加到这些队列的服务能够以异步、并行方式处理订单。

例如,附加到其中一个队列的 Amazon EC2 服务器实例可以处理订单的处理或配送,而另一个服务器实例可以附加到数据仓库以分析收到的所有订单。

为了方便学习,在本教程中,我们实际上不会将 EC2 实例附加到队列中。


a.单击此处在新浏览器窗口中打开 Amazon SQS 控制台。如果 SQS 登录页显示,请单击“立即开始使用”。否则,请继续执行下一步。

 

tmt_send-fanout-event-notifications_3a

(单击可缩放)

tmt_send-fanout-event-notifications_3a

b.我们的第一个队列将存储虚构库存服务的订单,该服务可以跟踪产品,以根据需要在每个订单的库存中添加和删除产品。 

Create New Queue(新建队列)页面上的 Queue Name(队列名称)字段中输入 Orders-for-Inventory。保留 Standard Queue(标准队列)的选中状态,然后单击 Quick-Create Queue(快速创建队列)。

tmt_send-fanout-event-notifications_3b

(单击可缩放)

tmt_send-fanout-event-notifications_3b

c.您的新队列随即会创建并在队列列表中处于选中状态。接下来,您将创建另一个对列来处理订单分析。

单击 Create New Queue(新建队列)以创建另一个对列来存储分析服务的订单。

tmt_send-fanout-event-notifications_3c

(单击可缩放)

tmt_send-fanout-event-notifications_3c

d.在 Queue Name(队列名称)字段中输入 Orders-for-Analytics,然后单击 Quick-Create Queue(快速创建队列)。 

tmt_send-fanout-event-notifications_3d

(单击可缩放)

tmt_send-fanout-event-notifications_3d

e.此时,新队列将显示在队列列表中。

tmt_send-fanout-event-notifications_3e

(单击可缩放)

tmt_send-fanout-event-notifications_3e

您已经创建了两个 Amazon SQS 队列,接下来您需要为它们订阅用于广播新订单通知的 Amazon SNS 主题。


a.在队列列表中,选择“Orders-for-Inventory”“Orders-for-Analytics”队列。在“队列操作”中,选择“为队列订阅 SNS 主题”

tmt_send-fanout-event-notifications_4a

(单击可缩放)

tmt_send-fanout-event-notifications_4a

b.此时将显示 Subscribe to a Topic(订阅主题)对话框。在“选择主题”下拉列表中,选择“New-Orders”Amazon SNS 主题。

您的 SNS 主题显示在列表中,因为创建它所用的账户与您用来创建 Amazon SQS 队列的账户相同。如果 SNS 主题是由其他账户创建的,您可以使用主题 ARN 来订阅它。有关更多详细信息,请参阅 Amazon SNS 文档

请勿更改 Topic Region(主题区域),并单击 Subscribe(订阅)。 

tmt_send-fanout-event-notifications_4b

(单击可缩放)

tmt_send-fanout-event-notifications_4b

c.此时将显示 Topic Subscription Result(主题订阅结果)对话框。单击 OK(确定)。

tmt_send-fanout-event-notifications_4c

(单击可缩放)

tmt_send-fanout-event-notifications_4c

现在,您已经为队列订阅了主题。在此步骤中,您将通过让虚构的电子商务应用程序将消息推送到包含订单详细信息的主题来模拟新订单。


a. 在 Amazon SNS 控制台的“New-Orders”主题详细信息页中,单击“发布消息”

 

5a-topic-create-confirm

(单击可缩放)

5a-topic-create-confirm

b. “向主题发布消息”页随即显示。在“主题”框中,键入“订单 123-4567890-1234567”。在“消息”字段中,输入以下文本来代表示例订单:

1 x Widget @ $29.99 USD

2 x Widget Cables @ $4.99

单击“发布消息”。确认对话框随即显示。

 

5b-sns-send-message-wf

(单击可缩放)

5b-sns-send-message-wf

发布新消息后,Amazon SNS 会将该消息发送至订阅此主题的各个终端节点。在类似这样的扇出场景中,Amazon SQS 队列是终端节点。

在此步骤中,您将通过查看主题发送到队列的消息来确认队列是否已收到新订单通知。


a.在 Amazon SQS 控制台中,从队列列表中选中 Orders-for-Inventory 队列对应的复选框。从 Queue Action(队列操作)下拉列表中,选择 View/Delete Messages(查看/删除消息)。

 

tmt_send-fanout-event-notifications_6a

(单击可缩放)

tmt_send-fanout-event-notifications_6a

b.单击 Start Polling for Messages(开始轮询消息)。


tmt_send-fanout-event-notifications_6b

(单击可缩放)

tmt_send-fanout-event-notifications_6b

c.View/Delete Messages in Orders-for-Inventory(查看/删除 Orders-for-Inventory 中的消息)对话框随即显示。

tmt_send-fanout-event-notifications_6c

(单击可缩放)

tmt_send-fanout-event-notifications_6c

d.在“Body”(正文)列中,单击 More Details(更多详情)。Message Details(更多详情)框包含 JSON 文档,此文档包含您发布到主题的主题和消息。 

您已确认 Orders-for-Inventory 队列已从 New-Orders 主题收到新订单的通知。 

单击 Close(关闭)。

 

tmt_send-fanout-event-notifications_6d

(单击可缩放)

tmt_send-fanout-event-notifications_6d

e.我们将假定虚构的库存服务已经处理完此消息,我们现在可以安全地从队列中删除此消息了。 

单击 Delete 1 Message(删除 1 条消息)。要进行确认,请单击 Yes, Delete Checked Messages(是,删除所选消息),然后单击 Close(关闭)。

 

tmt_send-fanout-event-notifications_6e

(单击可缩放)

tmt_send-fanout-event-notifications_6e

f.重复第 6a 到 6e 步,以确认 Orders-for-Analytics 队列也收到了新订单的通知。

tmt_send-fanout-event-notifications_6f

(单击可缩放)

tmt_send-fanout-event-notifications_6f

在此步骤中,您将删除在本教程中创建的资源,包括主题订阅、主题和队列。最佳做法是删除您不再使用的资源,以免产生费用。


a. 打开 Amazon SNS 控制台,并单击左侧导航窗格中的“主题”

选择“New-Orders”主题。

单击“删除”,以删除主题。

 

7a

(单击可缩放)

7a

b. “删除”确认对话框随即显示。在此对话框中键入“delete me”,并单击“删除”。此时,主题及其订阅都会遭删除。现在,您可以关闭 SNS 浏览器窗口(但不要退出,因为您仍需要在 SQS 控制台中删除队列)。

7b

(单击可缩放)

7b

c.在 Amazon SQS 控制台中,选择 Orders-for-InventoryOrders-for-Analytics 队列。从 Queue Actions(队列操作)中,选择 Delete Queues(删除队列)。


tmt_send-fanout-event-notifications_7c

(单击可缩放)

tmt_send-fanout-event-notifications_7c

d.Delete Queues(删除队列)对话框随即显示。单击 Yes, Delete 2 Queues(是,删除 2 个队列)。 两个队列将被删除。

现在,您可以退出 Amazon SQS 控制台了。

tmt_send-fanout-event-notifications_7d

(单击可缩放)

tmt_send-fanout-event-notifications_7d

您已经使用 Amazon SNS 和 Amazon SQS 实施了一个扇出场景。现在,您可以结合使用 Amazon SNS 和 Amazon SQS,以将消息发送到需要即刻获得事件通知的应用程序,或将消息缓冲到 Amazon SQS 队列中供其他应用程序稍后处理。

 


至此,您已学习了如何使用 Amazon Simple Notification Service 和 Amazon Simple Queue Service 实施消息扇出通知。请选择以下选项之一来深入了解 AWS 上的云消息收发。

了解更多

概览 Amazon Web Services (AWS) 上消息主题的功能、组件和使用案例。访问 Amazon SNS 网页 »

深入了解

了解如何让应用程序、最终用户和设备即刻在云中发送和接收通知。阅读文档 »

查看实际效果

了解 Capital One 等客户如何使用 Amazon SQS 和 Amazon SNS 分离和扩展应用程序。观看网络研讨会 »