FIFO 传送逻辑 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

FIFO 传送逻辑

以下概念可帮助您更好地了解 FIFO 的消息收发。

发送消息

如果多条消息连续发送到 FIFO 队列(每条消息具有不同的消息重复数据删除 ID),Amazon SQS 将存储消息并确认传输。然后,可按传输每条消息的确切顺序接收和处理消息。

在 FIFO 队列中,消息基于消息组 ID 进行排序。如果多台主机(或同一主机上的不同线程)将具有相同消息组 ID 的消息发送到 FIFO 队列,Amazon SQS 将按消息到达以供处理的顺序存储消息。要确保 Amazon SQS 保留发送和接收消息的顺序,每位创建者应使用唯一的消息组 ID 来发送其所有消息。

FIFO 队列逻辑仅应用于每个消息组 ID。每个消息组 ID 代表 Amazon SQS 队列中不同的有序的消息组。对于每一个消息组 ID,所有消息的发送和接收均严格遵循一定的顺序。但是,具有不同的消息组 ID 值的消息可能不会按顺序发送和接收。您必须将消息组 ID 与消息关联。如果您未提供消息组 ID,此操作将失败。如果需要一组有序的消息,请为要将消息发送到 FIFO 队列提供相同的消息组 ID。

接收消息

您无法请求接收具有特定消息组 ID 的消息。

当接收来自具有多个消息组 ID 的 FIFO 队列的消息时,Amazon SQS 会首先尝试尽可能多地返回具有相同消息组 ID 的消息。这时其他使用者能处理具有不同消息组 ID 的消息。

注意

可使用 MaxNumberOfMessages 操作的 ReceiveMessage 请求参数在单次调用中接收多达 10 条消息。这些消息将保留其 FIFO 顺序且可具有相同的消息组 ID。因此,如果具有相同消息组 ID 的消息少于 10 条,则您可接收来自属于 10 条消息的同一批中其他消息组 ID 的消息,但仍按 FIFO 顺序。

多次重试

FIFO 队列允许生产者或使用者尝试多次重试:

  • 如果生产者检测到失败SendMessage操作时,它可以使用相同的消息重复数据消除 ID,根据需要重试发送多次。假设创建者在重复数据消除间隔过期之前至少收到一个确认,多次重试既不会影响邮件的排序,也不会引入重复项。

  • 如果使用者检测到失败ReceiveMessage操作,它可以根据需要重试次数,使用相同的接收请求尝试 ID。假设使用者在可见性超时到期之前至少收到一个确认,多次重试不会影响消息的排序。

  • 当您收到具有消息组 ID 的邮件时,除非您删除该邮件或其变为可见,否则不会返回同一消息组 ID 的其他消息。