FIFO 传送逻辑 - Amazon Simple Queue Service

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

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 的消息。