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

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

FIFOAmazon 中的队列配送逻辑 SQS

以下概念可以帮助您更好地了解消息的发送和接收来自的消息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 的消息。

当接收来自具有多个消息组的FIFO队列的消息时IDs,Amazon 会SQS首先尝试返回尽可能多的具有相同消息组 ID 的消息。这使其他使用者能处理具有不同消息组 ID 的消息。当您收到带有消息组 ID 的消息时,除非您删除该消息或该消息变为可见,否则不会再返回具有同一消息组 ID 的消息。

注意

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

多次重试

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

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

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

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