本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 的消息。
-