本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
什么是 Amazon Simple Queue Service?
Amazon Simple Queue Service (Amazon SQS) 提供了一个安全、持久且可用的托管队列,以允许您集成和分离分布式软件系统与组件。Amazon SQS 提供常见构造,例如死信队列和成本分配标签。它提供了一个通用 Web 服务 API,您可以使用该 AWS 软件开发工具包支持的任何编程语言进行访问。
使用 Amazon SQS 的优势
-
安全性 – 您可以控制谁能向 Amazon SQS 队列发送消息以及谁能从该队列接收消息。您可以选择通过使用默认 Amazon SQS 托管服务器端加密 (SSE) 或使用在 AWS Key Management Service (AWS KMS) 中管理的自定义 SSE 密钥来保护队列中的消息内容,从而传输敏感数据。
-
持久性 – 为确保您消息的安全,Amazon SQS 将消息存储在多个服务器上。标准队列支持at-least-once 消息传送,FIFO 队列支持精确一次的消息处理和高吞吐量模式。
-
可用性 – Amazon SQS 使用冗余基础设施为生成和使用消息提供高度并发的消息访问和高可用性。
-
可扩展性 – Amazon SQS 可独立处理各个缓冲的请求,并可透明扩展以处理任何负载增加或峰值,无需任何预配置指令。
-
可靠性 – Amazon SQS 在处理期间锁定消息,以便多个创建者同时发送消息,多个使用者同时接收消息。
-
自定义 – 您的队列不必完全相同,例如,您可以设置队列的默认延迟。您可以使用 Amazon Simple Storage Service (Amazon S3) 或 Amazon DynamoDB 存储大于 256 KB 的消息内容,Amazon SQS 保留指向 Amazon S3 对象的指针,您也可以将一条大消息拆分为几个小消息。
基本 Amazon SQS 架构
本节介绍分布式消息系统的组件,并解释了 Amazon SQS 消息的生命周期。
分布式队列
分布式消息系统有三个主要部分:分布式系统的组件、队列(分布在 Amazon SQS 服务器上)和队列中的消息。
在以下场景中,您的系统有多个创建者(向队列发送消息的组件)和使用者(从队列接收消息的组件)。队列(保存从 A 到 E 的消息)在多个 Amazon SQS 服务器上冗余存储消息。

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

创建者(组件 1)将消息 A 发送到队列,消息以冗余方式分布在 Amazon SQS 服务器上。
当消费者(组件 2)准备好处理消息时,它会消耗来自队列的消息,并返回消息 A。在处理消息 A 期间,它仍保留在队列中,并且在可见性超时期间不返回至后续接收请求。
使用者(组件 2)从队列中删除消息 A,以防止消息在可见性超时到期后再次被接收和处理。
注意
Amazon SQS 会自动删除在队列中已过了最大消息保存期的消息。默认的消息保存期为 4 天。不过,您可使用 SetQueueAttributes
操作将消息保存期设为介于 60 秒和 1209600 秒(14 天)之间的值。
Amazon SQS、Amazon MQ 和 Amazon SNS 之间的区别
Amazon SQS、Amazon
Amazon SQS 作为队列服务,可以实现分布式软件系统和组件的分离和扩展。它通常通过单个订阅用户来处理消息,非常适合对顺序和防止消息丢失有严格要求的工作流程。如果需要更广泛的分发,可以将 Amazon SQS 与 Amazon SNS 集成,启用扇出消息传送
Amazon SNS 让发布者通过作为通信渠道的主题向多个订阅用户发送消息。订阅用户可以使用受支持的端点类型接收已发布的消息,例如,Amazon Data Firehose、Amazon SQS、Lambda、HTTP、电子邮件、移动推送通知和移动短信(SMS)。该服务非常适合需要即时通知的场景,例如实时用户参与或警报系统。为了防止订阅用户离线时消息丢失,将 Amazon SNS 与 Amazon SQS 队列消息集成可以确保消息传递的一致性。
Amazon MQ 最适合希望从传统消息代理迁移的企业,支持 AMQP 和 MQTT 等标准消息协议,以及 Apache ActiveMQ
下表概述了每种服务的资源类型:
资源类型 | Amazon SNS | Amazon SQS | Amazon MQ |
---|---|---|---|
同步 | 否 | 否 | 是 |
异步 | 支持 | 是 | 是 |
队列 | 否 | 是 | 是 |
发布/订阅消息收发 | 是 | 否 | 是 |
消息代理 | 否 | 否 | 是 |
建议将 Amazon SQS 和 Amazon SNS 用于可从几乎无限的可扩展性和简单性中受益的新应用程序。 APIs他们通常以其 pay-as-you-go定价为大批量应用程序提供更具成本效益的解决方案。我们建议 Amazon MQ 从依赖与 JMS APIs 等协议或高级消息队列协议 (AMQP)、MQTT 和简单文本消息协议 (STOMP) 等协议兼容性的现有消息代理中迁移应用程序。 OpenWire