在本教程中,您将了解如何利用 Amazon Simple Notification Service (SNS) 的消息筛选功能。消息筛选功能可确保订阅某个 SNS 主题的终端节点仅接收它感兴趣的主题消息子集。
在我们的示例中,用户需要访问网站以发布保险报价请求。这些报价请求可用于车险、船险或人寿保险。当用户发布保险报价请求后,请求会被转发到一系列后端系统。有一个处理车险和船险的销售系统,一个处理人寿保险的销售系统,以及一个需要处理所有报价请求的分析系统。
正如我们在发送扇出事件通知教程中所学到的,我们将借助 SNS 和 SQS 的扇出消息收发模式将网站与后端系统分离。要将事件通知发送到正确的后端系统,您可以为每种类型的报价请求创建单独的主题,然后将消息路由逻辑添加到您的发布者。但是,此方法可能会导致发布者过于复杂、主题激增以及预置和管理 SNS 主题产生额外开销。而 SNS 消息筛选要简单得多!
在本教程中,您将使用 Amazon SNS 和 Amazon Simple Queue Service (SQS)。这两种服务都在 AWS 免费套餐范围内。
筛选 AWS 上的消息需要拥有账户
创建免费账户AWS 免费套餐包括 1000000 个 Amazon Simple Notification Service 发布和 1000000 个 Amazon Simple Queue Service 请求。
首先,您要创建一个 Amazon SNS 主题,以便于用户在保险网站上发出报价请求时发布消息。这些请求可能与车险、船险或人寿保险有关。
a.单击此处之后,AWS 管理控制台将在新的浏览器窗口中打开,因此您可以使本分步指南保持打开状态。此屏幕加载后,请输入您的用户名和密码以便开始操作。然后在搜索栏中键入 notification 并选择 Simple Notification Service 以打开服务控制台。
每个保险销售系统都会轮询来自订阅 SNS 主题的相应 SQS 消息队列的报价请求。
第一个队列将处理汽车和船舶保险报价请求;第二个队列将处理人寿保险报价请求;第三个队列将捕获所有报价请求。第三个队列将捕获所有报价请求(无论保险类型如何),以便为分析系统提供信息。这些首选项将被设置为 SNS 订阅的筛选策略。
在此步骤中,您将创建三个队列并为每个队列订阅 SNS 主题。
a.单击此处在新浏览器窗口中打开 Amazon SQS 控制台。如果 SQS 登录页显示,请单击“立即开始使用”。否则,请继续执行下一步。
现在,您已经创建了三个 Amazon SQS 队列,您需要为它们订阅广播新保险报价请求的 Amazon SNS 主题。
b. 此时会显示 Subscribe to a Topic(订阅主题)对话框。从选择一个主题下拉列表中选择 Insurance-Quote-Requests 主题,这是您想为您的三个队列订阅的主题。由于您使用同一账户创建了 SNS 主题,因此它会显示在列表中。
如果 SNS 主题是由其他账户创建的,您可以使用主题 ARN 字段来进行订阅。有关更多详细信息,请参阅 Amazon SNS 文档或我们的博客文章 Cross-Account Integration with SNS。
至此,您已经创建了所有 SNS 和 SQS 资源,接下来可以为您的 SNS 订阅设置筛选策略。筛选策略是简单的 JSON 文档,它被设置为 SNS 订阅的一个属性,该属性定义了订阅者感兴趣的通知类型。
没有筛选策略的订阅将接收发布到 SNS 主题的所有消息,因此在此场景中,您无需为 All-Quotes 队列设置筛选策略。
让我们来测试一下! 在此步骤中,您将能够通过向主题发布消息来模拟来自潜在客户生成网站的新保险报价请求。
您将发布具有不同属性的消息,以便查看正在运行的 Amazon SNS 消息筛选机制。
此时,您要通过检查发生的消息传送来验证每种类型的保险报价请求是否已路由到其对应的 SQS 消息队列。
您会发现,只有当相应的 SNS 订阅具有与此传入消息的属性匹配的筛选策略时,订阅的 Amazon SQS 队列才会收到消息。
尤其是,您还会注意到,有一个队列实际上收到了发布到该主题的所有消息。发生这种情况是因为此订阅没有设置筛选策略,因此导致该队列能够捕获所有消息。
在此步骤中,您将删除在本教程中创建的资源,包括主题主题、订阅和队列。最好删除您不再使用的资源,以避免产生费用。
您现在可以使用 Amazon Simple Notification Service (SNS) 上的消息筛选来构建更简单且更高效的发布/订阅架构。
利用消息筛选功能,Amazon SNS 主题订阅者能够选择性地只接收一部分他们感兴趣的消息,而不是接收发布至某个主题的所有消息。这消除了在您的订阅者中实施消息筛选逻辑或在您的发布者系统中实施消息路由逻辑的设计复杂性。
现在您已学习了如何使用 Amazon Simple Notification Service 实施消息筛选。请选择以下选项之一来深入了解 AWS 上的云消息收发。