

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

# Amazon SQS
<a name="sqs"></a>

[Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 支持标准队列（不保证排序）和 FIFO 队列（可保证在给定*消息组*内排序）。

队列是编配微服务的常用方法，可为消息提供长达 14 天的持久存储空间。队列由生产者填充，由使用者清空。将 AWS Lambda 用作使用者时，可将 SQS 队列配置为事件源。这种情况下，Lambda 服务事件源映射（ESM）会为您轮询队列，并在消息可用时将其传送至您的 Lambda 函数。在 Amazon Elastic Container Service（Amazon ECS）、Amazon Elastic Compute Cloud（Amazon EC2）等其他类型的计算服务上运行的微服务必须实施自己的轮询机制，以便从队列提取可用的新消息。

适用于 Amazon SQS 的 Lambda ESM 还支持消息筛选，因此您可以根据消息正文的内容，仅处理队列中部分消息。

## 轮询
<a name="sqs-polling"></a>

Amazon SQS 支持对消息进行短轮询和长轮询。短轮询会查询部分服务器以查找可用消息，并立即返回结果。但它可能不会返回所有可用消息。当您的应用程序需要尽快使用消息，或无法忍受较长时间的等待时，这很有用。

长轮询在经过可配置的时间间隔或接收可配置数量的消息后，才返回消息。这样可减少*空轮询*的数量，即没有消息返回的轮询次数，尤其对于接收消息较少的队列而言。减少空轮询的数量可降低 Amazon SQS 成本，因为此服务按每次请求收费，而每次轮询操作都算作一次请求。

## 指南
<a name="sqs-guidance"></a>

下列情况下，队列是一个不错的选择：
+ 您希望解耦组件，且组件之间无需同步通信。
+ 您正在具有不同可用性服务水平协议（SLA）或服务水平目标（SLO）的组件之间进行通信。
+ 一组消息通常只有一个使用者。

下列情况下，可以考虑另外一种选择：
+ 您需要同步通信。
+ 您需要复杂的路由逻辑才能将消息发送给正确的使用者。