本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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)的组件之间进行通信。
-
一组消息通常只有一个使用者。
下列情况下,可以考虑另外一种选择:
-
您需要同步通信。
-
您需要复杂的路由逻辑才能将消息发送给正确的使用者。