本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
什么是 Amazon 简单队列服务
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 服务器上)和队列中的消息。](images/ArchOverview.png)
消息生命周期
以下场景介绍 Amazon SQS 消息在队列中从创建到删除的整个生命周期。
![队列中 Amazon SQS 消息的生命周期,从创建到删除。](images/sqs-message-lifecycle-diagram.png)
创建者(组件 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 SQS Amazon Data Firehose、Lamb da、HTTP、电子邮件、移动推送通知和移动短信 (SMS)。该服务非常适合需要即时通知的场景,例如实时用户参与或警报系统。为了防止订阅者离线时消息丢失,将 Amazon SNS 与 Amazon SQS 队列消息集成,可确保一致传送。
Amazon MQ 最适合希望从传统消息代理迁移的企业,这些代理支持 AMQP 和 MQTT 等标准消息传递协议,以及 Apache ActiveMQ 和 RabbitMQ。
下表概述了每种服务的资源类型:
资源类型 | Amazon SNS | Amazon SQS | Amazon MQ |
---|---|---|---|
同步 | 否 | 否 | 是 |
异步 | 支持 | 是 | 是 |
队列 | 否 | 是 | 是 |
发布/订阅消息收发 | 是 | 否 | 是 |
消息代理 | 否 | 否 | 是 |
我们建议对新的应用程序使用 Amazon SQS 和 Amazon SNS,这样可以实现几乎不受限制的可扩展性和简单 API。他们通常以其 pay-as-you-go 定价为大批量应用程序提供更具成本效益的解决方案。我们建议 Amazon MQ 从依赖与 JMS 等 API 或高级消息队列协议 (AMQP)、MQTT 和简单文本消息协议 (STOMP) 等协议 (STOMP) 等协议兼容的现有消息代理中迁移应用程序。 OpenWire