

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

# FIFO 主题的 Amazon SNS 消息重复数据删除
<a name="fifo-message-dedup"></a>

 Amazon SNS FIFO 主题和 Amazon SQS FIFO 队列支持消息重复数据删除，只要满足以下条件，即可提供一次性消息传输和处理：
+ 订阅的 Amazon SQS FIFO 队列存在，并具有允许 Amazon SNS 服务委托人向队列传输消息的权限。
+ Amazon SQS FIFO 队列使用者处理消息，并在可见性超时到期之前将其从队列中删除。
+ Amazon SNS 订阅主题没有[消息筛选](fifo-message-filtering.md)功能。配置消息筛选时，Amazon SNS FIFO 主题支持最多一次性传输，因为可以根据订阅筛选策略筛选出消息。
+ 没有阻止确认邮件传输的网络中断。

**注意**  
当主题属性 `FifoThroughputScope` 设置为 `Topic` 时，消息重复数据删除将应用于整个 Amazon SNS FIFO 主题。当主题属性 `FifoThroughputScope` 设置为 `MessageGroup` 时，消息重复数据删除将应用于每个单独的[消息组](fifo-message-grouping.md)。

当您将消息发布到 Amazon SNS FIFO 主题时，该消息必须包含重复数据删除 ID。此 ID 包含在 Amazon SNS FIFO 主题传输给订阅的 Amazon SQS FIFO 队列的消息中。

如果具有特定重复数据删除 ID 的消息成功发布到 Amazon SNS FIFO 主题，则在五分钟重复数据删除间隔内使用相同重复数据删除 ID 发布的任何消息都将被接受，但不会传输。Amazon SNS FIFO 主题会在主题属性 `FifoThroughputScope` 配置的重复数据删除范围内继续跟踪该消息重复数据删除 ID，即使在消息被传输到订阅的端点之后也是如此。

如果保证消息正文对于每个已发布的消息都是唯一的，您可以为 Amazon SNS FIFO 主题和订阅的 Amazon SQS FIFO 队列启用基于内容的重复数据删除。Amazon SNS 使用消息正文生成一个唯一的哈希值，以用作每个消息的重复数据删除 ID，因此您无需在发送每条消息时设置重复数据删除 ID。

**注意**  
消息属性不包括在哈希计算中。

如果为 Amazon SNS FIFO 主题启用基于内容的重复数据删除，并且发布了带有重复数据删除 ID 的消息，则发布的重复数据删除 ID 将覆盖生成的基于内容的重复数据删除 ID。

在[汽车零部件价格管理示例使用案例](fifo-example-use-case.md)中，公司必须为每次价格更新设置一个通用唯一的重复数据删除 ID。这是因为即使在批发和零售的消息属性不同时，消息正文也可以是相同的。但是，如果公司将业务类型（批发或零售）与产品 ID 和产品价格一起添加到消息正文中，它们可以在 Amazon SNS FIFO 主题和订阅的 Amazon SQS FIFO 队列中启用基于内容的复制。

![\[使用汽车零件价格管理示例，消息重复数据删除在 Amazon SNS FIFO（先入先出）主题环境中的工作原理。它显示了如何防止发布到 Amazon SNS FIFO 主题的重复消息（m1）多次传送到订阅用户系统（批发、零售和分析队列）。这种重复数据删除可确保只处理唯一的消息，从而提高不同订阅用户功能之间消息处理的效率和准确性。\]](http://docs.aws.amazon.com/zh_cn/sns/latest/dg/images/sns-fifo-dedup.png)


除了消息排序和重复数据删除以外，Amazon SNS FIFO 主题还支持使用 AWS KMS 进行消息服务器端加密 (SSE) 以及 AWS PrivateLink 保护通过 VPC 端点的消息隐私。有关更多信息，请参阅 [FIFO 主题的 Amazon SNS 消息安全性](fifo-message-security.md)。