Amazon Simple Queue Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon SQS 标准队列

Amazon SQS 的默认队列类型为标准。标准 队列每个 操作支持接近无限的每秒事务数 (TPS)。 标准队列支持至少一次消息传递。但是,由于存在允许近乎无限吞吐量的高度分布式架构,偶尔会有一条消息的多个副本不按顺序传送。标准队列会尽最大努力进行排序,保证了消息大致按其发送的顺序进行传递。

有关使用 AWS 管理控制台、AWS SDK for Java(和 CreateQueue 操作)或 AWS CloudFormation 创建 标准 队列的信息,请参阅创建 队列

您可以在很多情况下使用标准消息队列(只要应用程序能够处理多次到达和不按顺序到达的消息),例如:

  • 将实时用户请求从密集型后台工作中分离 – 让用户在调整媒体大小或对媒体编码时上传媒体。

  • 将任务分配给多个工作程序节点 – 处理大量信用卡验证请求。

  • 将消息分批以便进一步处理 – 计划要添加到数据库的多个条目。

有关使用标准队列的最佳实践,请参阅适用于 Amazon SQS 标准和 FIFO (先进先出)队列的建议

消息排序

标准队列会尽量保持消息顺序,但可能有一条消息的多个副本可能不按顺序传送。如果系统要求保留该顺序,建议使用 FIFO (先进先出)队列,或者在每条消息中添加排序信息,以便在收到消息后对其重新排序。

至少一次传递

Amazon SQS 会在多台服务器上存储消息的副本,以实现冗余和高可用性。在极少数情况下,当您接收或删除消息时,存储消息副本的某台服务器可能不可用。

如果出现这种情况,则该不可用服务器上的消息副本将不会被删除,并且您在接收消息时可能会再次获得该消息副本。将应用程序设计为幂等 应用程序 (多次处理同一消息时,它们不应受到不利影响)。

通过短轮询使用消息

从队列中使用消息的过程取决于您使用的是短轮询 (默认行为) 还是长轮询。有关长轮询的更多信息,请参阅“Amazon SQS 长轮询”。

当通过短轮询从队列中使用消息时,Amazon SQS 会对其一部分服务器(基于加权随机分布)进行采样,并且仅从这些服务器返回消息。因此,特定接收请求可能不会返回您的所有消息。但是,如果您的队列中的消息少于 1,000 条,一个后续请求将返回您的消息。如果继续从您的队列中使用消息,则 Amazon SQS 会对其所有服务器进行采样,然后您将收到您的所有消息。

下图显示了系统组件之一发出接收请求后从标准队列返回的消息的短轮询行为。Amazon SQS 对其若干服务器(显示为灰色)进行采样并从这些服务器返回消息 A、C、D 和 B。系统不会为此请求返回消息 E,但将为后续请求返回该消息。


		            使用短(标准)轮询的消息采样