Amazon SQS - AWS 规范性指导

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

Amazon SQS

Amazon SQS 支持标准队列(不保证排序)和 FIFO 队列(可保证在给定消息组内排序)。

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

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

轮询

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

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

指南

下列情况下,队列是一个不错的选择:

  • 您希望解耦组件,且组件之间无需同步通信。

  • 您正在具有不同可用性服务水平协议(SLA)或服务水平目标(SLO)的组件之间进行通信。

  • 一组消息通常只有一个使用者。

下列情况下,可以考虑另外一种选择:

  • 您需要同步通信。

  • 您需要复杂的路由逻辑才能将消息发送给正确的使用者。