

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

# Amazon SQS 标准队列
<a name="standard-queues"></a>

Amazon SQS 提供标准队列作为默认队列类型，支持几乎无限数量的每秒 API 调用，以便进行 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) 和 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html) 等操作。标准队列可确保 at-least-once消息传送，但由于高度分散的架构，可能会传送一个以上的消息副本，而且消息偶尔会出现乱序的情况。尽管如此，标准队列还是会尽最大努力保持消息的发送顺序。

当您使用发送消息时`SendMessage`，Amazon SQS 会在确认消息之前将其冗余存储在多个可用区 (AZs) 中。这种冗余可以确保即使某个计算机、网络或可用区出现故障，您依然可以访问消息。

您可以使用 Amazon SQS 控制台创建和配置队列。有关详细说明，请参阅[使用 Amazon SQS 控制台创建标准队列](creating-sqs-standard-queues.md#step-create-standard-queue)。有关特定于 Java 的示例，请参阅 [Amazon SQS Java SDK 示例](sqs-java-tutorials.md)。

**标准队列的应用场景**

标准消息队列适用于各种场景，前提是应用程序能够处理可能多次到达或无序到达的消息。例子包括：
+ **将实时用户请求从密集型后台工作中分离**：用户可以在系统在后台调整媒体大小或对媒体编码时上传媒体。
+ **将任务分配给多个 Worker 节点**：例如，处理大量信用卡验证请求。
+ **批量处理消息以供进一步处理**：安排在稍后的时间将多个条目添加到数据库中。

要了解与标准队列相关的配额，请参阅 [Amazon SQS 标准队列配额](quotas-queues.md)。

有关使用标准队列的最佳实践，请参阅[Amazon SQS 最佳实践](sqs-best-practices.md)。

# 亚马逊 SQS at-least-once 配送
<a name="standard-queues-at-least-once-delivery"></a>

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

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

# Amazon SQS 队列和消息标识符
<a name="sqs-queue-message-identifiers"></a>

本主题介绍了标准队列和 FIFO 队列的标识符。这些标识符可帮助您查找并操作特定队列和消息。

## Amazon SQS 标准队列的标识符
<a name="sqs-general-identifiers"></a>

有关以下标识符的更多信息，请参阅 *[Amazon Simple Queue Service API 参考](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/)*。

### 队列名称和 URL
<a name="queue-name-url"></a>

在创建新的队列时，您必须为 AWS 账户和区域指定唯一的队列名称。Amazon SQS 会为您创建的每个队列分配一个名为*队列 URL* 的标识符，其中包含队列名称和其他 Amazon SQS 组件。每当您要对队列执行操作时，都需要提供其队列 URL。

以下是名为 `MyQueue` 的队列的队列 URL，该队列由 AWS 账号为 `123456789012` 的用户所拥有。

```
https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue
```

您可以通过列出队列并解析账号后的字符串，以编程方式检索队列的 URL。有关更多信息，请参阅 `[ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)`。

### 消息 ID
<a name="message-id"></a>

每条消息都会收到一个系统分配的*消息 ID*，该 ID 由 Amazon SQS 在 `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)` 响应中返回给您。此标识符用于识别消息。消息 ID 的最大长度为 100 个字符。

### 接收句柄
<a name="receipt-handle"></a>

每当收到来自队列的消息时，您都会收到该消息的*接收句柄*。此句柄与接收消息的操作相关联，与消息本身无关。要删除消息或更改消息可见性，您必须提供接收句柄（而不是消息 ID）。因此，您必须始终先接收消息，然后才能删除它（您不能将消息放入队列中，然后重新调用它）。接收句柄的最大长度为 1024 个字符。

**重要**  
如果多次接收某条消息，则每次接收该消息时，您都会获得不同的接收句柄。在请求删除该消息时，您必须提供最近收到的接收句柄（否则，可能无法删除该消息）。

以下是一个跨三行显示的接收句柄示例。

```
MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+Cw
Lj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QE
auMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0=
```