

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

# FIFO 主题的 Amazon SNS 消息筛选
<a name="fifo-message-filtering"></a>

Amazon SNS FIFO 主题支持消息筛选。使用消息筛选可通过从发布者系统卸载消息路由逻辑，从订阅者系统卸载消息筛选逻辑来简化您的架构。

当您为 Amazon SQS FIFO 队列或标准队列订阅 SNS FIFO 主题时，您可以使用消息筛选来指定订阅者接收消息的子集，而不是所有消息。每个订阅者都可以将其自己的筛选策略设置为订阅属性。根据筛选策略的范围，筛选策略与入站消息属性或消息正文进行匹配。如果筛选策略匹配，则主题会向订阅者传输消息的副本。如果没有匹配项，则主题不会传输消息的副本。

在[汽车零部件价格管理示例使用案例](fifo-example-use-case.md)中，假设已设置以下 Amazon SNS 筛选策略且筛选策略范围是 `MessageBody`：
+ 对于批发队列，筛选策略 `{"business":["wholesale"]}` 匹配包含名为 `business` 的键且在一组值中具有 `wholesale` 的每条消息。在下图中，消息 **m1** 中的键之一是值为 `wholesale` 的 `business`。消息 **m3** 中的键之一是值为 `["wholesale,retail"]` 的 `business`。因此，**m1** 和 **m3** 均匹配筛选策略的条件，并且这两条消息都会传输到批发队列中。
+ 对于零售队列，筛选策略 `{"business":["retail"]}` 匹配包含名为 `business` 的键且在一组值中具有 `retail` 的每条消息。在图中，消息 **m2** 中的键之一是值为 `retail` 的 `business`。消息 **m3** 中的键之一是值为 `["wholesale,retail"]` 的 `business`。因此，**m2** 和 **m3** 均匹配筛选策略的条件，并且这两条消息都会传输到零售队列中。
+ 对于分析队列，我们希望 Amazon Athena 接收所有记录，因此不应用任何筛选策略。

![\[Amazon SNS FIFO 主题如何利用筛选策略根据消息内容将消息路由到不同的 Amazon SQS 队列的示例。“business”键设置为“wholesale”的消息 m1 和 m3 将传送到批发队列，而带有“retail”的消息 m2 则指定指向零售队列的路由。这演示了有针对性的消息传送，确保每个订阅用户功能仅接收相关的消息，从而优化了处理效率和数据相关性。\]](http://docs.aws.amazon.com/zh_cn/sns/latest/dg/images/sns-fifo-filtering.png)


SNS FIFO 主题支持各种匹配运算符，包括属性字符串值、属性数值和属性键。有关更多信息，请参阅 [Amazon SNS 消息筛选](sns-message-filtering.md)。

SNS FIFO 主题不会向订阅的终端节点传输重复的消息。有关更多信息，请参阅 [FIFO 主题的 Amazon SNS 消息重复数据删除](fifo-message-dedup.md)。