

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

# 什么是 Amazon Simple Queue Service？
<a name="welcome"></a>

Amazon Simple Queue Service (Amazon SQS) 提供了一个安全、持久且可用的托管队列，以允许您集成和分离分布式软件系统与组件。Amazon SQS 提供常见构造，例如[死信队列](sqs-dead-letter-queues.md)和[成本分配标签](sqs-queue-tags.md)。它提供了一个通用 Web 服务 API，您可以使用该 AWS 软件开发工具包支持的任何编程语言进行访问。

## 使用 Amazon SQS 的优势
<a name="sqs-benefits"></a>
+ **安全性** – [您可以控制](security-iam.md)谁能向 Amazon SQS 队列发送消息以及谁能从该队列接收消息。您可以选择通过使用默认 Amazon SQS 托管服务器端加密 (SSE) 或使用在 AWS Key Management Service (AWS KMS) 中管理的自定义 [SSE](sqs-server-side-encryption.md) 密钥来保护队列中的消息内容，从而传输敏感数据。
+ **持久性** – 为确保您消息的安全，Amazon SQS 将消息存储在多个服务器上。[标准队列支持[at-least-once 消息传送](standard-queues-at-least-once-delivery.md)，FIFO 队列支持[精确一次的消息处理和高吞吐](FIFO-queues-exactly-once-processing.md)量模式。](high-throughput-fifo.md)
+ **可用性** – Amazon SQS 使用[冗余基础设施](#sqs-basic-architecture)为生成和使用消息提供高度并发的消息访问和高可用性。
+ **可扩展性** – Amazon SQS 可独立处理各个[缓冲的请求](sqs-client-side-buffering-request-batching.md)，并可透明扩展以处理任何负载增加或峰值，无需任何预配置指令。
+ **可靠性** – Amazon SQS 在处理期间锁定消息，以便多个创建者同时发送消息，多个使用者同时接收消息。
+ **自定义** – 您的队列不必完全相同，例如，您可以[设置队列的默认延迟](sqs-delay-queues.md)。您可以[使用 Amazon Simple Storage Service（Amazon S3）](sqs-s3-messages.md)或 Amazon DynamoDB 存储大于 1 MiB 的消息内容，Amazon SQS 保留指向 Amazon S3 对象的指针；或者，您也可以将一条大消息拆分为几条小消息。

## 基本 Amazon SQS 架构
<a name="sqs-basic-architecture"></a>

   了解分布式消息传送系统的组成部分以及 Amazon SQS 消息从创建到删除的生命周期。   

本部分简要介绍了分布式消息收发系统的组成部分，并说明了 Amazon SQS 消息的生命周期。

### 分布式队列
<a name="sqs-distributed-queue"></a>

分布式消息收发系统有三个主要部分：**分布式系统的组件**、**队列**（分布在 Amazon SQS 服务器上）以及**队列中的消息**。

在以下场景中，您的系统有多个*创建者*（向队列发送消息的组件）和*使用者*（从队列接收消息的组件）。队列（保存从 A 到 E 的消息）在多个 Amazon SQS 服务器上冗余存储消息。

![\[分布式消息收发系统有三个主要组成部分：分布式系统的组件、队列（分布在 Amazon SQS 服务器上）以及队列中的消息。\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/ArchOverview.png)


### 消息生命周期
<a name="sqs-message-lifecycle"></a>

以下场景介绍 Amazon SQS 消息在队列中从创建到删除的整个生命周期。

![\[Amazon SQS 消息在队列中从创建到删除的整个生命周期。\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-message-lifecycle-diagram.png)


![\[Section one description for the previous lifecycle diagram.\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-1-red.png) 创建者（Component 1）将消息 A 发送到一个队列，该消息以冗余方式在 Amazon SQS 服务器间分布。

![\[Section two description for the previous lifecycle diagram.\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-2-red.png) 使用者（Component 2）准备好处理消息时，会从队列使用消息，然后返回消息 A。在处理消息 A 期间，它仍保留在队列中，并且在[可见性超时](sqs-visibility-timeout.md)期间不返回至后续接收请求。

![\[Section three description for the previous lifecycle diagram.\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-3-red.png) 使用者（Component 2）从队列中删除消息 A，以阻止该消息在可见性超时过期后被再次接收和处理。

**注意**  
Amazon SQS 会自动删除在队列中已过了最大消息保存期的消息。默认的消息保存期为 4 天。不过，您可使用 `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` 操作将消息保存期设为介于 60 秒和 1209600 秒（14 天）之间的值。

## Amazon SQS、Amazon MQ 和 Amazon SNS 之间的区别
<a name="sqs-difference-from-amazon-mq-sns"></a>

 Amazon SQS、[Amazon](https://aws.amazon.com/sns/) SNS easy-to-use 和 Amazon [MQ](https://aws.amazon.com/amazon-mq/) 提供高度可扩展的托管消息服务，每种服务都是为分布式系统中的特定角色设计的。以下是对这些服务之间的区别的详细介绍：

 **Amazon SQS** 作为队列服务，可以实现分布式软件系统和组件的分离和扩展。它通常通过单个订阅用户来处理消息，非常适合对顺序和防止消息丢失有严格要求的工作流程。如果需要更广泛的分发，可以将 Amazon SQS 与 Amazon SNS 集成，启用[扇出消息传送](https://aws.amazon.com/getting-started/hands-on/send-fanout-event-notifications/)模式，从而有效地将消息同时推送给多个订阅用户。

 **Amazon SNS** 让发布者通过作为通信渠道的主题向多个订阅用户发送消息。订阅用户可以使用受支持的端点类型接收已发布的消息，例如，[Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)、[Amazon SQS](#welcome)、[Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)、HTTP、电子邮件、移动推送通知和移动短信（SMS）。该服务非常适合需要即时通知的场景，例如实时用户参与或警报系统。为了防止订阅用户离线时消息丢失，将 Amazon SNS 与 Amazon SQS 队列消息集成可以确保消息传递的一致性。

 **Amazon MQ** 最适合希望从传统消息代理迁移的企业，支持 AMQP 和 MQTT 等标准消息协议，以及 [Apache ActiveMQ](http://activemq.apache.org/) 和 [RabbitMQ](https://www.rabbitmq.com/)。它对需要稳定、可靠消息收发的遗留系统提供兼容支持，而无需进行大量重新配置。

 下表概述了每种服务的资源类型：


| 资源类型 | Amazon SNS | Amazon SQS | Amazon MQ | 
| --- | --- | --- | --- | 
| 同步 | 否 | 否 | 是 | 
| 异步 | 支持 | 是 | 是 | 
| 队列 | 否 | 是 | 是 | 
| 发布/订阅消息收发 | 是 | 否 | 是 | 
| 消息代理 | 否 | 否 | 是 | 

建议将 Amazon SQS 和 Amazon SNS 用于可从几乎无限的可扩展性和简单性中受益的新应用程序。 APIs他们通常以其 pay-as-you-go定价为大批量应用程序提供更具成本效益的解决方案。我们建议 Amazon MQ 从依赖与 JMS APIs 等协议或高级消息队列协议 (AMQP)、MQTT 和简单文本消息协议 (STOMP) 等协议兼容性的现有消息代理中迁移应用程序。 OpenWire