概览
问:与自主开发或打包的消息队列系统相比,Amazon SQS 有哪些优势?
由于自主开发管理消息队列的软件或使用商业或开源消息队列系统都需要大量的前期开发和配置工作,因此与使用这些软件或系统相比,Amazon SQS 具有多项优势。
这些替代方案需要持续的硬件维护和系统管理资源。配置和管理这些系统的操作十分复杂,再加上需要冗余的消息存储空间以确保在硬件出现故障时消息不会丢失,因此使得这一流程进一步变得更加繁杂。
相比之下,Amazon SQS 不需要任何管理开销,只需进行很少的配置即可使用。Amazon SQS 适用于大规模运行,每天可处理数十亿条消息。您可以在不进行任何配置的情况下增加或缩减发送到 Amazon SQS 的流量。Amazon SQS 还提供极高的消息持久性,为您和您的利益攸关方增添信心。
问:Amazon SQS 与 Amazon Simple Notification Service (SNS) 有何不同?
Amazon SNS 允许应用程序通过“推送”机制向多个订阅者发送时间紧迫的消息,无需定期检查或“轮询”以进行更新。Amazon SQS 是一种用于分布式应用程序的消息队列服务,通过轮询模型交换消息,可用于解耦发送和接收组件。
问:Amazon SQS 与 Amazon MQ 有何不同?
如果您在现有应用程序中使用消息收发,并希望快速轻松地将消息迁移到云中,我们建议您考虑使用 Amazon MQ。它支持行业标准的 API 和协议,因此您可以从任何基于标准的消息代理切换到 Amazon MQ,而无需重写应用程序中的消息代码。如果您要在云中构建全新的应用程序,我们建议您考虑使用 Amazon SQS 和 Amazon SNS。Amazon SQS 和 SNS 是轻量级、完全托管式消息队列和主题服务,几乎可以无限扩展,并提供简单易用的 API。
问:Amazon SQS 是否提供消息排序功能?
是。FIFO(先进先出)队列保留了发送和接收消息的确切顺序。如果您使用 FIFO 队列,则不必在消息中放置排序信息。有关更多信息,请参阅 Amazon SQS 开发人员指南中的 FIFO 队列逻辑。
标准队列提供了一种松散的 FIFO 功能,它将试图保持消息的顺序。但是,由于标准队列设计为可使用高度分布式架构进行大规模扩展,因此无法保证按发送消息的确切顺序接收消息。
问:Amazon SQS 是否保证消息交付?
标准队列提供至少一次交付,这意味着每条消息将至少交付一次。
FIFO 队列提供“正好一次”处理,这意味着每条消息仅交付一次,在消费者处理并删除该消息之前一直可用。队列中不会引入重复项。
问:Amazon SQS 与 Amazon Kinesis Streams 有何不同?
Amazon SQS 提供了可靠且高度可扩展的托管队列,当消息在应用程序和微服务之间传输时,它可用于存储消息。Amazon SQS 会在分布式应用程序组件之间传送数据,可帮助您解耦这些组件。Amazon SQS 提供常见的中间件结构,例如死信队列和毒丸管理。它还提供通用 Web 服务 API,可通过 Amazon SDK 支持的任何编程语言进行访问。Amazon SQS 同时支持标准队列和 FIFO 队列。
Amazon Kinesis Streams 允许实时处理串流大数据,并能够将记录读取和重放到多个 Amazon Kinesis 应用程序中。
有关更多信息,请参阅 Amazon Kinesis 文档。
问:Amazon 是否会将 Amazon SQS 用于自己的应用程序?
是。Amazon 的开发人员每天都会将 Amazon SQS 用于各种处理大量消息的应用程序。Amazon.com 和亚马逊云科技的主要业务流程都使用了 Amazon SQS。
计费
问:Amazon SQS 的费用是多少?
您将按实际用量付费,而且没有最低费用。
Amazon SQS 的费用按请求计算,外加从 Amazon SQS 向外传输数据的数据传输费用(除非数据是传输到同一区域内的 Amazon EC2 实例或 Amazon Lambda 函数)。有关每个队列类型和区域的详细定价明细,请参阅 Amazon SQS 定价。
问:我可以使用 Amazon SQS 免费套餐做些什么?
Amazon SQS 免费套餐每月将免费为您提供 100 万个请求。
许多小规模应用程序能够完全在免费套餐的限制范围内运行。但是,我们可能仍会向您收取数据传输费用。有关更多信息,请参阅 Amazon SQS 定价。
免费套餐为月度优惠。数月的免费使用量不会累积。
问:使用 Amazon SQS 如何收费和计费?
要开始使用 Amazon SQS,您无需支付任何初始费用。在月底,系统会自动从您的信用卡中扣除该月的使用费。
您可以随时在亚马逊云科技网站上查看当前账单周期的费用:
- 登录到您的亚马逊云科技账户。
- 在 Your Web Services Acount(您的 Web 服务账户)下,请选择 Account Activity(账户活动)。
问:如何跟踪和管理与我的 Amazon SQS 队列相关的费用?
您可以使用成本分配标签标记和跟踪队列以进行资源和成本管理。标签是由键值对组成的元数据标签。例如,您可以按成本中心标记队列,然后根据这些成本中心对成本进行分类和跟踪。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的标记您的 Amazon SQS 队列。有关亚马逊云科技资源的成本分配标记的更多信息,请参阅《亚马逊云科技账单和成本管理用户指南》中的使用成本分配标签。
特性、功能和接口
问:是否可以将 Amazon SQS 与其他亚马逊云科技服务配合使用?
是。通过将 Amazon SQS 与 Amazon EC2、Amazon EC2 Container Service (Amazon ECS) 和 Amazon Lambda 等计算服务以及 Amazon Simple Storage Service (Amazon S3) 和 Amazon DynamoDB 等存储和数据库服务结合使用,您可以提高应用程序的灵活性和可扩展性。
问:如何与 Amazon SQS 进行交互?
您可以使用亚马逊云科技管理控制台访问 Amazon SQS,该控制台可帮助您轻松创建 Amazon SQS 队列和发送消息。
Amazon SQS 还提供网络服务 API。它还与亚马逊云科技软件开发工具包集成,允许您使用自己选择的编程语言进行工作。
问:谁可以对消息队列执行操作?
只有亚马逊云科技账户所有者(或账户所有者已委派权限的亚马逊云科技账户)才能对 Amazon SQS 消息队列执行操作。
问:Amazon SQS 如何识别消息?
所有消息都有一个全局唯一 ID,当消息传送到消息队列时,Amazon SQS 会返回该全局唯一 ID。对消息执行任何后续操作都不需要该 ID,但它对于跟踪消息队列中特定消息的接收情况非常有用。
当您收到来自消息队列的消息时,响应会包含一个接收句柄,您必须在删除消息时提供该句柄。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的队列和消息标识符。
问:Amazon SQS 如何解决无法处理的消息?
在 Amazon SQS 中,您可以使用 API 或控制台配置死信队列,这些队列将接收来自其他源队列的消息。配置死信队列时,需要使用 RedriveAllowPolicy 为死信队列重新驱动设置适当的权限。
RedriveAllowPolicy 包含死信队列重新驱动权限的参数。它定义了哪些源队列可以将死信队列指定为 JSON 对象。
创建死信队列后,它会在无法完成最大处理尝试次数后接收消息。您可以使用死信队列来隔离无法处理的邮件,以便日后进行分析。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的使用 Amazon SQS 死信队列。
问:什么是可见性超时?
可见性超时是指一段时间,在此期间内 Amazon SQS 会阻止其他使用组件接收和处理消息。有关更多信息,请参阅 Amazon SQS 开发人员指南中的可见性超时。
问:Amazon SQS 是否支持消息元数据?
是。一条 Amazon SQS 消息最多可以包含 10 个元数据属性。您可以使用消息属性将消息正文与描述消息的元数据分开。这有助于更快速、更高效地处理和存储信息,因为您的应用程序在了解如何处理信息之前不必检查整条消息。
Amazon SQS 消息属性采用名称-类型-值三元组的形式。支持的类型包括字符串、二进制和数字(包括整型、浮点型和双精度型)。有关更多信息,请参阅 Amazon SQS 开发人员指南中的使用 Amazon SQS 消息属性。
问:如何确定排队时间值?
要确定排队时间值,您可以在接收消息时请求 SentTimestamp 属性。从当前时间减去该值将得出排队时间值。
问:Amazon SQS 的典型延迟是多少?
SendMessage、ReceiveMessage 和 DeleteMessage API 请求的典型延迟为数十毫秒或小数百毫秒。
问:对于匿名访问,消息的 SenderId 属性的值是多少?
当亚马逊云科技账户 ID 不可用时(例如,匿名用户发送消息时),Amazon SQS 会提供该 IP 地址。
问:什么是 Amazon SQS 长轮询?
Amazon SQS 长轮询是一种从 Amazon SQS 队列中检索消息的方法。虽然常规短轮询会立即返回结果,即使正在轮询的消息队列为空,长轮询也不会在消息到达消息队列或长轮询超时之前返回响应。
长轮询降低了在消息可用时立即从 Amazon SQS 队列中检索消息的成本。使用长轮询可能会降低使用 SQS 的成本,因为您可以减少空接收的数量。有关更多信息,请参阅 Amazon SQS 开发人员指南中的 Amazon SQS 长轮询。
问:使用 Amazon SQS 长轮询是否需要支付额外费用?
不需要。长轮询 ReceiveMessage 调用的计费方式与短轮询 ReceiveMessage 调用的计费方式完全相同。
问:什么时候应该使用 Amazon SQS 长轮询,什么时候应该使用 Amazon SQS 短轮询?
在几乎所有情况下,相比短轮询,我们都会更建议您选择 Amazon SQS 长轮询。长轮询请求可让队列使用者在消息到达队列后立即收到消息,同时减少返回的空 ReceiveMessageResponse 实例的数量。
在大多数使用案例中,Amazon SQS 长轮询能够以更低的成本实现更高的性能。但是,如果您的应用程序希望 ReceiveMessage 调用立即响应,则需要对应用程序进行一些修改,否则您可能无法利用长轮询。
例如,如果您的应用程序使用单个线程轮询多个队列,则从短轮询切换到长轮询可能不起作用,因为单个线程将在任何空队列上等待长轮询超时,从而延迟对可能包含消息的任何队列的处理。
在这样的应用程序中,最好使用单个线程来处理一个队列,这样应用程序就可以善加利用 Amazon SQS 长轮询的优势了。
问:长时间轮询超时应该使用什么值?
通常,长轮询超时应使用最多 20 秒。由于较高的长轮询超时值会减少返回的空 ReceiveMessageResponse 实例的数量,因此请尝试将长轮询超时设置得尽可能高。
如果 20 秒的最大值不适用于您的应用程序(请参阅上一个问题中的示例),请将较短的长轮询超时设置为低至 1 秒。
默认情况下,所有亚马逊云科技软件开发工具包都支持长达 20 秒的轮询。如果您不使用亚马逊云科技 SDK 访问 Amazon SQS,或者如果您将亚马逊云科技 SDK 配置为具有更短的超时时间,则可能需要修改 Amazon SQS 客户端以允许更长的请求或使用较短的长轮询超时。
问:什么是适用于 Java 的 AmazonSQSBufferedAsyncClient?
适用于 Java 的 AmazonSQSBufferedAsyncClient 提供了 AmazonSQSAsyncClient 接口的实现,并添加了几项重要功能:
- 自动批量处理多个 SendMessage、DeleteMessage 或 ChangeMessageVisibility 请求,而无需对应用程序进行任何更改
- 将消息预取到本地缓冲区中,使您的应用程序能够立即处理来自 Amazon SQS 的消息,而无需等待消息被检索
自动批处理和预取协同工作可以提高吞吐量并减少应用程序的延迟,同时通过减少发出 Amazon SQS 请求,从而降低成本。有关更多信息,请参阅 Amazon SQS 开发人员指南中的客户端缓冲和请求批处理。
问:我是否必须重写我的应用程序才能使用适用于 Java 的 AmazonSQSBufferedAsyncClient?
不是。适用于 Java 的 AmazonSQSBufferedAsyncClient 是作为现有 AmazonSQSAsyncClient 的直接替代品而实现的。
如果您更新应用程序以使用最新的亚马逊云科技 SDK,并将客户端更改为使用适用于 Java 的 AmazonSQSBufferedAsyncClient 而不是 AmazonSQSAsyncClient,则您的应用程序将获得自动批处理和预取的额外好处。
问:如何订阅 Amazon SQS 消息队列以接收来自 Amazon SNS 主题的通知?
- 在 Amazon SQS 控制台中,选择一个 Amazon SQS 标准队列。
- 在“Queue Action”(队列操作)下,从下拉列表中选择“Subscribe Queue to SNS Topic”(为队列订阅 SNS 主题)。
- 在对话框中,从“Choose a Topic”(选择主题)下拉列表中选择主题,然后单击 Subscribe(订阅)。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的为队列订阅 Amazon SNS 主题。
问:是否可以在不删除消息队列本身的情况下删除消息队列中的所有消息?
是。您可以使用 PurgeQueue 操作删除 Amazon SQS 消息队列中的所有消息。
清除消息队列时,先前发送到该消息队列的所有消息都将被删除。由于消息队列及其属性仍然存在,因此无需重新配置消息队列;您可以继续使用它。
要仅删除特定的消息,请使用 DeleteMessage 或 DeleteMessageBatch 操作。
有关更多信息,请参阅本教程:从 Amazon SQS 队列中清除消息。
FIFO 队列
问:FIFO 队列在哪些地区可用?
FIFO 队列在所有提供 Amazon SQS 的亚马逊云科技区域中都可用。
问:我会收到多少条消息?
FIFO 队列旨在不引入重复的消息。但是,在某些情况下,您的消息生成器可能会引入重复项:例如,如果生成器发送消息,但未收到响应,然后重新发送了同一条消息。Amazon SQS API 提供重复数据删除功能,可防止您的消息生成器发送重复项。消息生成器引入的任何重复项都将在 5 分钟的重复项删除时间间隔内删除。
对于标准队列,您可能偶尔会重复收到消息的副本(至少一次交付)。如果使用标准队列,则必须将应用程序设计为幂等(也就是说,在多次处理同一条消息时,它们不可受到不利影响)。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的正好一次处理。
问:我之前使用的 Amazon SQS 队列是否已更改为 FIFO 队列?
没有。Amazon SQS 标准队列(现有队列的新名称)将保持不变,您仍然可以创建标准队列。这些队列将继续提供最高的可扩展性和吞吐量;但是,您将无法获得排序保证,并且可能会出现重复内容。
标准队列适用于许多场景,例如具有多个幂等使用者的工作分配。
问:我能否将现有的标准队列转换为 FIFO 队列?
不能。您必须在创建队列时选择队列类型。但是,您可以移动到 FIFO 队列。有关更多信息,请参阅 Amazon SQS 开发人员指南中的从标准队列移动到 FIFO 队列。
问:Amazon SQS FIFO 队列是否向后兼容?
要利用 FIFO 队列功能,您必须使用最新的亚马逊云科技 SDK。FIFO 队列使用与标准队列相同的 API 操作,接收和删除消息以及更改可见性超时的机制也相同。但是,在发送消息时,必须指定消息组 ID。有关更多信息,请参阅 Amazon SQS 开发人员指南中的 FIFO 队列逻辑。
问:Amazon SQS FIFO 队列与哪些亚马逊云科技或外部服务兼容?
某些向 Amazon SQS 发送通知的亚马逊云科技或外部服务可能与 FIFO 队列不兼容,尽管它们允许您将 FIFO 队列设置为目标。
亚马逊云科技服务的以下功能目前与 FIFO 队列不兼容:
· Amazon IoT 规则操作
· Amazon Lambda 死信队列
问:Amazon SQS FIFO 队列是否与 Amazon SQS Buffered Asynchronous Client(适用于 Java 的 Amazon SQS 扩展客户端库)兼容?
FIFO 队列目前与 Amazon SQS Buffered Asynchronous Client 不兼容。
FIFO 队列与适用于 Java 的 Amazon SQS 扩展客户端库和 Amazon SQS Java 消息服务 (Java Message Service) 客户端兼容。
问:Amazon SQS FIFO 队列支持哪些 Amazon CloudWatch 指标?
FIFO 队列支持标准队列支持的所有指标。对于 FIFO 队列,所有近似指标都会返回准确的计数。例如,支持以下 Amazon CloudWatch 指标:
· ApproximateNumberOfMessagesDelayed – 队列中延迟且无法立即读取的消息数。
· ApproximateNumberOfMessagesVisible – 可从队列中检索的消息数。
· ApproximateNumberOfMessagesNotVisible – 正在传输的消息数量(发送到客户端但尚未删除或尚未到达其可见性窗口末尾)。
问:什么是消息组?
消息在 FIFO 队列中按照不同的、有序的“捆绑包”进行分组。对于每个消息组 ID,所有消息都按照严格的顺序发送和接收。但是,具有不同消息组 ID 值的消息可能不会按顺序发送和接收。您必须将消息组 ID 与消息关联。如果您不提供消息组 ID,则操作将失败。
如果多个主机(或同一主机上的不同线程)发送具有相同消息组 ID 的消息到 FIFO 队列,则 Amazon SQS 将按照消息到达的顺序传输这些消息以进行处理。为确保 Amazon SQS 保持消息的发送和接收顺序,请确保有多个发件人使用唯一的消息组 ID 发送每条消息。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的 FIFO 队列逻辑。
问:Amazon SQS FIFO 队列是否支持多个生成者?
是。一个或多个生成者可以向 FIFO 队列发送消息。按照 Amazon SQS 成功接收消息的顺序存储消息。
如果多个生成者并行发送消息,而不等待来自 SendMessage 或 SendMessageBatch 操作的成功响应,则可能无法保留生成者之间的顺序。SendMessage 或 SendMessageBatch 操作的响应包含 FIFO 队列用于将消息放入队列的最终排序顺序,因此 multiple-parallel-producer 代码可以确定消息在队列中的最终顺序。
问:Amazon SQS FIFO 队列是否支持多个使用者?
根据设计,Amazon SQS FIFO 队列不会一次向多个使用者提供来自同一消息组的消息。但是,如果您的 FIFO 队列有多个消息组,您可以利用并行使用者,从而允许 Amazon SQS 向不同的使用者提供来自不同消息组的消息。
问:我是否能将死信队列与 FIFO 队列配合使用?
是。但是,您必须将 FIFO 死信队列与 FIFO 队列结合使用。(同样,您只能将标准死信队列与标准队列结合使用。)
问:Amazon SQS FIFO 队列的吞吐量配额是多少?
默认情况下,FIFO 队列每秒最多支持 3000 条批处理消息,或者每秒最多支持 300 条进行批处理的消息(每秒 300 次发送、接收或删除操作)。如果您需要更高的吞吐量,可以在 Amazon SQS 控制台上为 FIFO 启用高吞吐量模式,该模式每秒最多支持 1.5 万条使用批处理的消息,或每秒最多支持 1500 条不使用批处理的消息。
问:是否存在特定于 FIFO 队列属性的限制?
FIFO 队列的名称必须以 .fifo 后缀结尾。后缀计入 80 个字符的队列名称限制。要确定队列是否为 FIFO,您可以检查队列名称是否以该后缀结尾。
安全性和可靠性
问:在 Amazon SQS 中存储数据的可靠性如何?
Amazon SQS 将所有消息队列和消息存储在具有多个冗余可用区 (AZ) 的高可用性亚马逊云科技区域内,因此,任何一台计算机、任何一个网络或可用区故障都不会导致消息无法访问。有关更多信息,请参阅 Amazon Relational Database Service 用户指南中的区域和可用区。
问:如何保护消息队列中的消息安全?
身份验证机制可确保存储在 Amazon SQS 消息队列中的消息受到保护,防止未经授权的访问。您可以控制谁可以向消息队列发送消息,以及谁可以从消息队列接收消息。为了提高安全性,您可以构建应用程序以在将消息放入消息队列之前对其进行加密。
Amazon SQS 拥有自己的基于资源的权限系统,该系统使用以与 Amazon Identity and Access Management (IAM) 策略相同的语言编写的策略:例如,您可以使用变量,就像在 IAM 策略中一样。有关更多信息,请参阅 Amazon SQS 开发人员指南中的 Amazon SQS 策略示例。
Amazon SQS 支持 HTTP over SSL (HTTPS) 和传输层安全性 (TLS) 协议。大多数客户端可以自动协商使用较新版本的 TLS,而无需更改任何代码或配置。
问:为什么会有单独的 ReceiveMessage 和 DeleteMessage 操作?
当 Amazon SQS 向您返回消息时,无论您是否实际收到消息,该消息都会保留在消息队列中。您有责任删除该消息,并且删除请求将确认您已完成对该消息的处理。
如果您不删除该消息,Amazon SQS 将在收到另一个接收请求时再次发送该消息。有关更多信息,请参阅 Amazon SQS 开发人员指南中的可见性超时。
问:已删除的消息是否能再次接收?
不能。FIFO 队列永远不会引入重复的消息。对于标准队列,在极少数情况下,您可能会再次收到以前删除的消息。
问:如果我对之前已删除的消息发出 DeleteMessage 请求,会发生什么情况?
当您对之前已删除的消息发出 DeleteMessage 请求时,Amazon SQS 会返回成功响应。
服务器端加密 (SSE)
问:用于 Amazon SQS 的服务器端加密 (SSE) 有什么益处?
服务器端加密 (SSE) 允许您在加密队列中传输敏感数据。SSE 使用 Amazon Key Management Service (Amazon KMS) 中托管的密钥保护 Amazon SQS 队列中的消息内容。一旦 Amazon SQS 收到消息,SSE 就会对其进行加密。这些消息以加密形式存储,Amazon SQS 仅在这些消息发送给授权使用者时才对其进行解密。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的使用服务器端加密 (SSE) 和 Amazon KMS 保护数据。
问:我是否能将 SNS、Cloud Watch 事件和 S3 事件用于加密队列?
是。为此,您需要启用亚马逊云科技服务(例如 Amazon CloudWatch Events、Amazon S3 和 Amazon SNS)与使用 SSE 的队列之间的兼容性。有关详细说明,请参阅 SQS 开发人员指南的兼容性部分。
问:哪些区域提供带有 SSE 的队列?
适用于 Amazon SQS 的服务器端加密 (SSE) 在提供 Amazon SQS 的所有亚马逊云科技区域均可用。
问:如何为新的或现有的 Amazon SQS 队列启用 SSE?
要使用 Amazon SQS API 为新队列或现有队列启用 SSE,请通过设置 CreateQueue 或 SetQueueAttributes 操作的 KmsMasterKeyId 属性来指定客户主密钥 (CMK) ID:亚马逊云科技托管的 CMK 或自定义 CMK 的别名、别名 ARN、密钥 ID 或密钥 ARN。
有关详细说明,请参阅 Amazon SQS 开发人员指南中的使用服务器端加密创建 Amazon SQS 队列和为现有的 Amazon SQS 队列配置服务器端加密 (SSE)。
问:哪些 Amazon SQS 队列类型可以使用 SSE?
标准队列和 FIFO 队列都支持 SSE。
问:我需要什么权限才能将 SSE 与 Amazon SQS 结合使用?
在使用 SSE 之前,您必须配置 Amazon KMS 密钥策略来支持队列的加密以及消息的加密和解密。
要为队列启用 SSE,您可以使用适用于 Amazon SQS 的亚马逊云科技托管式客户主密钥 (CMK) 或自定义 CMK。有关更多信息,请参阅 Amazon KMS 开发人员指南中的客户主密钥。
要将消息发送到加密队列,生成者必须拥有 CMK 的 kms:GenerateDataKey 和 kms:Decrypt 权限。
要接收来自加密队列的消息,使用者必须对用于加密指定队列中的消息的任何 CMK 具有 kms:Decrypt 权限。如果队列充当死信队列,则使用者还必须对用于加密源队列中的消息的任何 CMK 具有 kms:Decrypt 权限。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的使用 SSE 需要什么权限?。
问:将 SSE 与 Amazon SQS 结合使用是否会收取任何费用?
不会收取额外的 Amazon SQS 费用。但是,从 Amazon SQS 到 Amazon KMS 的调用会收取费用。有关更多信息,请参阅 Amazon Key Management Service 定价。
使用 Amazon KMS 的费用取决于为队列配置的数据密钥重复使用周期。有关更多信息,请参阅 Amazon SQS 开发人员指南中的如何估算我的 Amazon KMS 使用费用?
问:适用于 Amazon SQS 的 SSE 会对什么进行加密?它是如何加密的?
SSE 对 Amazon SQS 队列中的消息正文进行加密。
SSE 不会加密以下组件:
· 队列元数据(队列名称和属性)
· 消息元数据(消息 ID、时间戳和属性)
· 每个队列的指标
Amazon SQS 根据适用于 Amazon SQS 的亚马逊云科技托管式客户主密钥 (CMK) 或自定义 CMK 生成数据没有,以便在可配置的时间段(从 1 分钟到 24 小时)内对消息进行信封加密和解密。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的适用于 Amazon SQS 的 SSE 会对什么进行加密?。
问:适用于 Amazon SQS 的 SSE 使用什么算法来加密消息?
SSE 使用 AES-GCM 256 算法。
问:SSE 是否会限制可使用 Amazon SQS 创建的每秒事务数 (TPS) 或队列数量?
SSE 不限制 Amazon SQS 的吞吐量 (TPS)。您可以创建的 SSE 队列的数量受以下因素的限制:
· 数据密钥重复使用期限(1 分钟到 24 小时)。
· Amazon KMS 的每个账户配额(默认为 100 TPS)。
· 访问队列的 IAM 用户或账户的数量。
· 存在大量积压(较大的积压需要更多的 Amazon KMS 调用)。
例如,让我们假设以下情况:
· 您将数据密钥重复使用期限设置为 5 分钟(300 秒)。
· 您的 KMS 账户的默认 Amazon KMS TPS 配额为 100 TPS。
· 您将一个没有积压和有 1 个 IAM 用户的 Amazon SQS 队列用于
· 对所有队列的 SendMessage 或 ReceiveMessage 操作。在此情况下,您可以使用 SSE 按如下方式计算 Amazon SQS 队列的理论最大数量:
300 秒 × 100 TPS / 1 个 IAM 用户 = 3 万个队列
问:如何估算我的 Amazon KMS 使用成本?
为了预测成本并更好地了解您的亚马逊云科技账单,您可能想知道 Amazon SQS 使用您的 CMK 的频率。
注意:尽管以下公式可以让您很好地了解预期成本,但由于 Amazon SQS 的分布式性质,实际成本可能会更高。
要计算每个队列的 API 请求数 (R),请使用以下公式:
R = B / D * (2 * P + C)
B 是计费周期(以秒为单位)
D 是数据密钥重复使用周期(以秒为单位)
P 是发送到 Amazon SQS 队列的生成主体的数量。
C 是从 Amazon SQS 队列接收的使用主体的数量。
重要提示:通常,生成主体所产生的成本是使用主体的两倍。有关更多信息,请参阅 Amazon SQS 开发人员指南中在数据密钥重复使用期如何运作?。
如果生成者和使用者具有不同的 IAM 用户,则成本会增加。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的如何估算我的 Amazon KMS 使用成本?
限制
问:我的消息可以在 Amazon SQS 消息队列中保留多长时间?
较长的消息保留期提供了更大的灵活性,从而允许消息生成和使用之间有更长的间隔。
您可以将 Amazon SQS 消息保留期配置为从 1 分钟到 14 天的值。默认值为 4 天。达到消息保留配额后,您的消息将被自动删除。
问:如何配置 Amazon SQS 以支持更长的消息保留期?
要配置消息保留期,请使用控制台或 Distributiveness 方法设置 MessageRetentionPeriod 属性。使用此属性指定消息将在 Amazon SQS 中保留的秒数。
您可以使用 MessageRetentionPeriod 属性设置 60 秒(1 分钟)到 1209600 秒(14 天)的消息保留期。
问:如何配置 Amazon SQS 的最大消息大小?
要配置最大消息大小,请使用控制台或 SetQueueAttributes 方法设置 MaximumMessageSize 属性。 此属性指定 Amazon SQS 消息可以包含的字节数。将此属性设置为介于 1024 字节 (1KB) 至 262144 字节 (256KB) 之间的值。有关更多信息,请参阅 Amazon SQS 开发人员指南中的使用 Amazon SQS 消息属性。
问:消息中可以包含哪种数据?
Amazon SQS 消息最多可包含 256KB 的文本数据,包括 XML、JSON 和无格式文本。接受以下 Unicode 字符:
#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]
问:Amazon SQS 消息队列可以有多大?
单个 Amazon SQS 消息队列可以包含无限数量的消息。但是,标准队列的正在进行的消息数量配额为 12 万个,FIFO 队列的该配额为 2 万个。使用组件从队列中接收消息,但尚未从队列中删除消息后,消息处于运行状态。
问:我可以创建多少个消息队列?
您可以创建任意数量的消息队列。
问:Amazon SQS 消息队列的名称是否有大小限制?
队列名称不得超过 80 个字符。
问:Amazon SQS 消息队列的名称是否有限制?
您可以使用字母数字字符、连字符 (-) 和下划线 (_)。
问:我是否能重复使用消息队列名称?
消息队列的名称在亚马逊云科技账户和区域内必须是唯一的。删除消息队列后,可以重复使用该消息队列的名称。
队列共享
问:如何共享消息队列?
您可以将访问策略语句与要共享的消息队列相关联(并指定授予的权限)。Amazon SQS 提供用于创建和管理访问策略语句的 API:
· AddPermission
· RemovePermission
· SetQueueAttributes
· GetQueueAttributes
问:共享队列访问的费用由谁支持?
消息队列所有者为共享消息队列访问付费。
问:如何识别要与之共享消息队列的另一位亚马逊云科技用户?
Amazon SQS API 使用亚马逊云科技账号来识别亚马逊云科技用户。
问:我需要向想要与之共享消息队列的亚马逊云科技用户提供什么?
要与亚马逊云科技用户共享消息队列,请提供要共享的消息队列的完整 URL。CreateQueue 和 ListQueues 操作在其响应中返回此 URL。
问:Amazon SQS 是否支持匿名访问?
是。您可以配置允许匿名用户访问消息队列的访问策略。
问:我应该在什么时候使用权限 API?
权限 API 提供了一个接口,用于将消息队列的访问权限共享给开发人员。但是,此 API 不允许有条件访问或更高级的使用案例。
问:什么时候应该对 JSON 对象使用 SetQueueAttributes 操作?
SetQueueAttributes 操作支持完全访问策略语言。例如,您可以使用策略语言按 IP 地址和时间限制对消息队列的访问。
有关更多信息,请参阅 Amazon SQS 开发人员指南中的 Amazon SQS 策略示例。
服务访问和区域
问:我是否能在不同区域的队列之间共享消息?
不能。每个 Amazon SQS 消息队列在每个区域内都是独立的。
问:各区域之间是否存在定价差异?
是的,Amazon SQS 在每个区域有不同的价格。有关更多信息,请参阅 Amazon SQS 定价。
问:不同区域之间的定价结构是什么?
您可以在单个区域内在 Amazon SQS 与 Amazon EC2 或 Amazon Lambda 之间免费传输数据。
当您在不同区域内在 Amazon SQS 与 Amazon EC2 或 Amazon Lambda 之间传输数据时,将按正常的数据传输费率向您收费。有关更多信息,请参阅 Amazon SQS 定价。