我理解标准 SQS 使用“至少一次”传递,而 FIFO 消息只传递一次。
SQS 消息的重复百分比(大约)是多少? 在权衡标准队列与 FIFO 时,这似乎是一个重要因素。我想知道这是否取决于消息吞吐量?
亚马逊没有针对您的问题提供任何详细数字(甚至是大概的数字)。
我能找到的最好的内容是在AWS SQS 文档中。强调我的:
Amazon SQS 将消息副本存储在多个服务器上,以实现冗余和高可用性。 在极少数情况下,当您接收或删除消息时,存储消息副本的服务器之一可能不可用。
如果发生这种情况,该消息的副本不会在该不可用的服务器上删除,并且您在收到消息时可能会再次获得该消息副本。将您的应用程序设计为幂等的(多次处理同一消息时,它们不应受到不利影响)。
根据亚马逊的解释,这与您的消息吞吐量无关。您应该将其视为“预期的”AWS 平台故障。
只要您的消息处理程序是幂等的,这就不会成为问题。
SQS 文档称,如果托管 SQS 的节点之一出现故障,并且无法接收删除消息,则可能会出现重复消息。
基于此,您的重复消息数量将会相当少。如果您的应用程序不能容忍重复的消息,那么您可能需要使用 FIFO 队列。
我认为您应该问的问题是“我的进程是否具有处理重复消息的幂等性?”
如果不是,请使您的进程幂等并使用标准 SQS 队列。
如果是,请使用标准SQS队列。
您始终可以使用 SQS FIFO 队列,但这将使您的应用程序代码与不支持此类功能的其他队列系统“不兼容”。