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

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

FIFO 交付逻辑

以下概念可以帮助您更好地了解向 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 的消息。当您收到带有消息组 ID 的消息时,除非您删除该消息或该消息变为可见,否则不会再返回同一消息组 ID 的消息。

注意

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

多次重试

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

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

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

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