AmazonSimpleQueueService,Amazon

转换成 4

SimpleQueueService 开发人员指南 AmazonSimpleQueueService开发人员指南 AmazonSimpleQueueService:开发人员指南 Copyright©AmazonWebServices,Inc.and/oritsaffiliates.Allrightsreserved.Amazon的商标和商业外观不得用于任何非Amazon的商品或服务,也不得以任何可能引起客户混淆或者贬低或诋毁Amazon的方式使用。
所有非Amazon拥有的其它商标均为各自所有者的财产,这些所有者可能附属于Amazon、与Amazon有关联或由Amazon赞助,也可能不是如此。
AmazonSimpleQueueService开发人员指南 TableofContents 什么是AmazonSQS?.......................................................................................................................

1使用AmazonSQS的优势...........................................................................................................

1AmazonSQS、AmazonMQ和AmazonSNS之间的区别.................................................................1队列类型....................................................................................................................................

1AmazonSQS入门的常见任务......................................................................................................

2AmazonSQS的定价..................................................................................................................


2 设置..................................................................................................................................................

4第1步:创建AWS账户.............................................................................................................

4第2步:创建IAM用户..............................................................................................................

4第3步:获取访问密钥ID和秘密访问密钥......................................................................................5第4步:为使用示例代码做好准备.................................................................................................

6后续步骤....................................................................................................................................


6 开始使用............................................................................................................................................

7先决条件....................................................................................................................................

7第1步:创建队列......................................................................................................................

7第2步:发送消息......................................................................................................................

7第3步:接收和删除消息.............................................................................................................

8第4步:删除队列......................................................................................................................

8后续步骤....................................................................................................................................


9 配置AmazonSQS............................................................................................................................

10了解AmazonSQS控制台..........................................................................................................

10创建队列..................................................................................................................................

11编辑队列..................................................................................................................................

12配置队列参数............................................................................................................................

12配置访问策略............................................................................................................................

13为队列配置SSE-SQS................................................................................................................

14为队列配置SSE-KMS................................................................................................................

14配置死信队列............................................................................................................................

15配置死信队列重驱......................................................................................................................

15为队列配置标签.........................................................................................................................

16为队列订阅主题.........................................................................................................................

16配置Lambda触发器.................................................................................................................

17先决条件..........................................................................................................................

17 管理队列..........................................................................................................................................

19发送消息..................................................................................................................................

19消息属性..................................................................................................................................

20接收和删除消息.........................................................................................................................

20清除队列..................................................................................................................................

21删除队列..................................................................................................................................

21确认队列为空............................................................................................................................

22 AmazonSQS的运作原理...................................................................................................................

24基本架构.................................................................................................................................

24分布式队列.......................................................................................................................

24消息生命周期....................................................................................................................

25标准队列..................................................................................................................................

26消息排序..........................................................................................................................

26至少一次传递....................................................................................................................

26FIFO队列................................................................................................................................

26消息排序..........................................................................................................................

27关键术语..........................................................................................................................

27FIFO传送逻辑..................................................................................................................

28确切一次处理....................................................................................................................

28从标准队列移至FIFO队列.................................................................................................

29FIFO队列的高吞吐量........................................................................................................

29 iii AmazonSimpleQueueService开发人员指南 兼容性.............................................................................................................................

34队列和消息标识符......................................................................................................................

34 标准队列和FIFO队列的标识符...........................................................................................

34FIFO队列的其他标识符.....................................................................................................

35消息元数据...............................................................................................................................

35消息属性..........................................................................................................................

36消息系统属性....................................................................................................................

38处理消息所需的资源.................................................................................................................

38列出队列分页............................................................................................................................

39成本分配标签............................................................................................................................

39短轮询和长轮询.........................................................................................................................

39通过短轮询来使用消息.......................................................................................................

40通过长轮询来使用消息.......................................................................................................

40长轮询和短轮询之间的区别.................................................................................................

41死信队列..................................................................................................................................

41死信队列的工作方式..........................................................................................................

41死信队列有哪些好处?.......................................................................................................

42不同的队列类型如何处理消息失败?.....................................................................................42何时应使用死信队列?.......................................................................................................

42将消息移出死信队列..........................................................................................................

43排查死信队列的问题..........................................................................................................

43可见性超时...............................................................................................................................

44传输中的消息....................................................................................................................

45设置可见性超时.................................................................................................................

45更改消息的可见性超时.......................................................................................................

46终止消息的可见性超时.......................................................................................................

46延迟队列..................................................................................................................................

46临时队列..................................................................................................................................

47虚拟队列..........................................................................................................................

47请求-响应消息收发模式(虚拟队列)....................................................................................48示例方案:处理登录请求....................................................................................................

49清除队列..........................................................................................................................

50消息定时器...............................................................................................................................

51最佳实践..........................................................................................................................................

52对标准队列和FIFO队列的建议...................................................................................................

52使用消息.........................................................................................................................

52降低成本.........................................................................................................................

54从标准队列移至FIFO队列.................................................................................................

55针对FIFO队列的其他建议.........................................................................................................

55使用消息重复数据删除ID..................................................................................................

55使用消息组ID.................................................................................................................

56使用接收请求尝试ID.........................................................................................................

57JavaSDK示例:..............................................................................................................................

58使用服务器端加密......................................................................................................................

58将SSE添加到现有队列.....................................................................................................

58为队列禁用SSE...............................................................................................................

59使用SSE创建队列...........................................................................................................

59检索SSE属性.................................................................................................................

59配置标签..................................................................................................................................

59列出标签..........................................................................................................................

60添加或更新标签.................................................................................................................

60删除标签..........................................................................................................................

60发送消息属性............................................................................................................................

61定义属性..........................................................................................................................

61发送带有属性的消息..........................................................................................................

62管理大消息...............................................................................................................................

62先决条件..........................................................................................................................

63 iv AmazonSimpleQueueService开发人员指南 例如:使用AmazonS3管理大型AmazonSQS消息.............................................................63使用JMS.........................................................................................................................................

66 先决条件..................................................................................................................................

66开始使用Java消息库................................................................................................................

67 创建JMS连接.................................................................................................................

67创建AmazonSQS队列.....................................................................................................

67同步发送消息....................................................................................................................

68同步接收消息....................................................................................................................

69异步接收消息....................................................................................................................

70使用客户端确认模式..........................................................................................................

71使用无序确认模式..............................................................................................................

71将JMS客户端与其他AmazonSQS客户端一起使用......................................................................72实际可用的Java示例:结合使用JMS与AmazonSQS标准队列.....................................................73ExampleConfiguration.java.................................................................................................

73TextMessageSender.java...................................................................................................

75SyncMessageReceiver.java................................................................................................

76AsyncMessageReceiver.java...............................................................................................

77SyncMessageReceiverClientAcknowledge.java......................................................................79SyncMessageReceiverUnorderedAcknowledge.java................................................................81SpringExampleConfiguration.xml.........................................................................................83SpringExample.java...........................................................................................................

84ExampleCommon.java.......................................................................................................

86支持的JMS1.1实施.................................................................................................................

87支持的常用接口.................................................................................................................

87支持的消息类型.................................................................................................................

87支持的消息确认模式..........................................................................................................

87JMS定义的标头和预留属性................................................................................................

88教程................................................................................................................................................

89创建AmazonSQS队列(AWSCloudFormation)..........................................................................89从VPC发送消息......................................................................................................................

90第1步:创建AmazonEC2keypair...................................................................................90第2步:创建AWS资源....................................................................................................

91第3步:请确认您的EC2实例不可公开访问。
......................................................................91第4步:为AmazonSQS创建AmazonVPC终端节点..........................................................92第5步:向您的AmazonSQS队列发送消息........................................................................93配额................................................................................................................................................

94与队列相关的配额......................................................................................................................

94与消息相关的配额......................................................................................................................

95与策略相关的配额......................................................................................................................

97自动化和问题排查..............................................................................................................................

98使用EventBridge自动执行通知...................................................................................................

98对队列进行故障排除..................................................................................................................

98安全性.............................................................................................................................................

99数据保护..................................................................................................................................

99数据加密..........................................................................................................................

99互联网络流量隐私............................................................................................................

106IdentityandessManagement..............................................................................................

107身份验证........................................................................................................................

108访问控制........................................................................................................................

108概览..............................................................................................................................

109使用基于身份的策略.........................................................................................................

113将自定义策略用于访问策略语言.........................................................................................121使用临时安全凭证............................................................................................................

131API权限参考..................................................................................................................

132日志记录和监控.......................................................................................................................

134使用CloudTrail记录API调用...........................................................................................

134使用CloudWatch监控队列...............................................................................................

138 v AmazonSimpleQueueService开发人员指南 合规性验证.............................................................................................................................

144故障恢复能力..........................................................................................................................

145 分布式队列.....................................................................................................................

145基础设施安全性.......................................................................................................................

145最佳实践................................................................................................................................

146 预防性最佳实践...............................................................................................................

146使用API........................................................................................................................................

148 提出查询API请求...................................................................................................................

148构建终端节点..................................................................................................................

148提出GET请求...............................................................................................................

149提出POST请求.............................................................................................................

149对请求进行身份验证.........................................................................................................

150解释响应........................................................................................................................

152 批处理操作.............................................................................................................................

153启用客户端缓冲和请求批处理.............................................................................................

154利用水平扩展和操作批处理来提高吞吐量.............................................................................157 相关资源........................................................................................................................................

166文档历史记录..................................................................................................................................

167AWS词汇表....................................................................................................................................

169....................................................................................................................................................

clxx vi AmazonSimpleQueueService开发人员指南使用AmazonSQS的优势 什么是AmazonSimpleQueueService? AmazonSimpleQueueService(AmazonSQS)提供了一个安全、持久且可用的托管队列,可让您集成和分离分布式软件系统和组件。
AmazonSQS提供常见的结构,例如死信队列(p.41)和成本分配标签(p.39).它提供了一个通用Web服务API,您可以使用任何编程语言访问。
AWSSDK支持。
AmazonSQS支持两者标准(p.26)和FIFO队列(p.26).有关更多信息,请参阅队列类型(p.1)。
主题•使用AmazonSQS的优势(p.1)•AmazonSQS、AmazonMQ和AmazonSNS之间的区别(p.1)•队列类型(p.1)•AmazonSQS入门的常见任务(p.2)•AmazonSQS的定价(p.2) 使用AmazonSQS的优势 •安全–你可以控(p.107)谁能向AmazonSQS队列发送消息并从队列接收消息。
服务器端加密(SSE)(p.100)可让您使用中托管的密钥来保护队列中消息的内容,从而传输敏感数据。
AWSKeyManagementService(AWSKMS)。
•持久性持久性—为确保您消息的安全,AmazonSQS将消息存储在多个服务器上。
标准队列支持至少一次消息传递(p.26),并支持FIFO队列正好一次消息处理(p.28).•可用性AmazonSQS使用冗余基础架(p.24)为生成和使用消息提供高度并发的消息访问和高可用性。
•可扩展性—AmazonSQS可以处理每个缓冲的请求(p.154)可独立扩展以处理任何负载增加或峰值,无需任何预配置指令。
•可靠性AmazonSQS在处理期间锁定消息,以便多个生成者可同时发送消息,多个使用者可同时接收消息。
•自定义您的队列不必完全相同,例如,您可以在队列上设置默认延迟(p.46).可以存储大于256KB的消息的内容。
使用AmazonSimpleStorageService(AmazonS3)(p.62)或AmazonDynamoDB,AmazonSQS持有指向AmazonS3对象的指针,或者您可以将大消息拆分为较小的消息。
AmazonSQS、AmazonMQ和AmazonSNS之间的区别 AmazonSQS和AmazonSNS是高度可扩展、易于使用且不需要您设置消息代理的队列和主题服务。
我们建议对新的应用程序使用这些服务,这样可以实现几乎不受限制的可扩展性和简单API。
AmazonMQ是一项托管消息代理服务,可兼容许多常见消息代理。
我们建议使用AmazonMQ从依赖与API(如JMS)或协议(如AMQP、OpenWire和STOMP)的兼容性的现有消息代理迁移应用程序。
队列类型 下表介绍了标准队列和FIFO队列的功能。

1 AmazonSimpleQueueService开发人员指南AmazonSQS入门的常见任务 标准队列 无限吞吐量每个API操作的标准队列支持几乎无限的API调用(SendMessage、ReceiveMessage,或者DeleteMessage)。
至少一次传递传递至少一次消息传递,但偶尔会传送消息的多个副本。
最大努力订购有时,消息的传递顺序与发送时的顺序不同。
FIFO队列 高吞吐量如果您使用一批(p.153),FIFO队列的每个API方法每秒最多支持3,000条消息(SendMessageBatch、ReceiveMessage,或者DeleteMessageBatch)。
每秒3000条消息代表300个API调用,每个调用带有包含10条消息的一个批处理。
要申请提高配额,请提交支持请求。
在不使用批处理的情况下,FIFO队列的每个API方法(SendMessage、ReceiveMessage或DeleteMessage)每秒最多支持300个API调用。
确切一次处理消息传送一次并在使用者处理并删除消息之前保持可用。
不会将重复项引入到队列中。
先进先出配送严格保持消息的发送和接收顺序。
当吞吐量很重要时,请在应用程序之间发送数据,例如: •将实时用户请求从密集型后台工作中分离:让用户在调整媒体大小或对媒体编码时上传媒体。
•将任务分配给多个工作程序节点:处理大量信用卡验证请求。
•将消息分批以便进一步处理:计划要添加到数据库的多个条目。
当事件的顺序重要时,请在应用程序之间发送数据,例如: •确保按正确的顺序运行用户输入的命令。
•通过按正确的顺序发送价格修改来显示正确的产 品价格。
•防止学员在注册账户之前参加课程。
AmazonSQS入门的常见任务 •要使用AmazonSQS创建您的第一个队列并发送、接收和删除消息,请参阅开始使用AmazonSQS(p.7). •要触发Lambda函数,请参阅配置队列以触发AWSLambda函数(控制台)(p.17)。
•要探索AmazonSQS的功能和架构,请参阅。
AmazonSQS的运作原理(p.24).•要查找有助于您充分利用AmazonSQS的准则和注意事项,请参阅。
AmazonSQS的最佳实 践(p.52).•探索AmazonSQS示例,了解其中一个AWSSDK,例如AWSSDKforJava2.x开发人员指南.•要了解AmazonSQS操作的信息,请参阅AmazonSimpleQueueServiceAPI参考.•了解AmazonSQSAWSCLI命令,请参阅AWSCLI命令参考. AmazonSQS的定价 AmazonSQS没有前期成本。
前百万个月请求是免费的。
之后,您将根据请求的数量和内容以及与AmazonS3和AWSKeyManagementService.
2 AmazonSimpleQueueService开发人员指南AmazonSQS的定价 想要了解有关信息,请参阅AmazonSQS定价.
3 AmazonSimpleQueueService开发人员指南第1步:创建AWS账户 设置AmazonSQS 主题•第1步:创建AWS账户(p.4)•第2步:创建IAM用户(p.4)•第3步:获取访问密钥ID和秘密访问密钥(p.5)•第4步:为使用示例代码做好准备(p.6)•后续步骤(p.6) 必须先完成以下步骤,然后才能首次使用AmazonSQS。
第1步:创建AWS账户 要访问任何AWS首先,您需要创建一个AWS账户,可以使用的账户AWS产品。
您可以使用AWS账户查看您的活动和使用情况报告并管理身份验证和访问。
为了避免使用你的AWS账户为了执行AmazonSQS操作的根用户,最佳实践是为需要AmazonSQS的管理权限的每个人创建一个IAM用户。
如需设置新账户
1.打开/billing/signup。

2.按照屏幕上的说明进行操作。
在注册时,您将接到一通电话,要求您使用电话键盘输入一个验证码。
第2步:创建IAM用户 自行创建管理员用户并将该用户添加到管理员组(控制台)
1.选择Rootuser(根用户)并输入您的AWS账户电子邮件地址,以账户拥有者身份登录IAM控制台。
在下一页上,输入您的密码。
Note 强烈建议您遵守以下使用AdministratorIAM用户的最佳实践,妥善保存根用户凭证。
只在执行少数账户和服务管理任务时才作为根用户登录。

2.在导航窗格中,选择Users(用户),然后选择Addusers(添加用户)。

3.对于Username(用户名),输入Administrator。

4.选中AWSManagementConsoleess(AWSManagementConsole管理控制台访问)旁边的复选框。
然后选择自定义密码,并在文本框中输入新密码。

5.(可选)默认情况下,AWS要求新用户在首次登录时创建新密码。
您可以清除Usermustcreateanewpasswordatnextsign-in(用户必须在下次登录时创建新密码)旁边的复选框以允许新用户在登录后重置其密码。

6.选择Next:。
Permissions(下一步:权限)。

7.在设置权限下,选择将用户添加到组。

4 AmazonSimpleQueueService开发人员指南第3步:获取访问密钥ID和秘密访问密钥
8.选择创建组。

9.在Creategroup(创建组)对话框中,对于Groupname(组名称),输入Administrators。
10.选择Filterpolicies(筛选策略),然后选择AWSmanaged-jobfunction(AWS托管–工作职能)以 筛选表内容。
11.在策略列表中,选中ess的复选框。
然后选择Creategroup(创建组)。
Note 您必须先激活IAM用户和角色对账单的访问权限,然后才能使用ess权限访问AWSBillingandCostManagement控制台。
为此,请按照“向账单控制台委派访问权限”教程第1步中的说明进行操作。
12.返回到组列表中,选中您的新组所对应的复选框。
如有必要,选择Refresh(刷新)以在列表中查看该组。
13.选择Next:。
标签。
14.(可选)通过以键值对的形式附加标签来向用户添加元数据。
有关在IAM中使用标签的更多信息,请参阅IAM用户指南中的标记IAM实体。
15.选择Next:。
审核以查看要添加到新用户的组成员资格的列表。
如果您已准备好继续,请选择Createuser(创建用户)。
您可使用这一相同的流程创建更多组和用户,并允许您的用户访问AWS账户资源。
要了解有关使用策略限制用户对特定AWS资源的权限的信息,请参阅访问管理和示例策略。
第3步:获取访问密钥ID和秘密访问密钥 要使用AmazonSQS操作(例如,使用Java或通过AWSCommandLineInterface),您需要访问密钥ID和秘密访问密钥。
Note 访问密钥ID和秘密访问密钥特定于AWSIdentityandessManagement。
请勿与其他凭证相混淆AWSAmazonEC2密钥对等服务。
访问密钥包含访问密钥ID和秘密访问密钥,用于签署对AWS发出的编程请求。
如果没有访问密钥,您可以使用进行创建AWSManagementConsole。
作为最佳实践,请勿在不必要时对任何任务使用AWS账户根用户访问密钥。
而是为自己创建一个具有访问密钥的新管理员IAM用户。
仅当创建访问密钥时,您才能查看或下载秘密访问密钥。
以后您无法恢复它们。
不过,您随时可以创建新的访问密钥。
您还必须拥有执行所需IAM操作的权限。
有关更多信息,请参阅IAM用户指南中的访问IAM资源所需的权限。
为IAM用户创建访问密钥
1.登录AWSManagementConsole,单击/iam/打开IAM控制台。

2.在导航窗格中,选择Users(用户)。

3.选择要为其创建访问密钥的用户的名称,然后选择Securitycredentials(安全凭证)选项卡。

4.在esskeys(访问密钥)部分中,选择Createesskey(创建访问密钥)。

5.要查看新访问密钥对,请选择Show(显示)。
关闭此对话框后,您将无法再次访问该秘密访问密钥。
您 的凭证与下面类似: •访问密钥ID:AKIAIOSFODNN7EXAMPLE•秘密访问密钥:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY6.要下载密钥对,请选择Download.csvfile(下载.csv文件)。
将密钥存储在安全位置。
关闭此对话框后,您将无法再次访问该秘密访问密钥。

5 AmazonSimpleQueueService开发人员指南第4步:为使用示例代码做好准备 请对密钥保密以保护您的AWS账户,切勿通过电子邮件发送密钥。
请勿对企业外部共享密钥,即使有来自AWS或的询问。
合法代表Amazon的任何人永远都不会要求您提供密钥。

7.下载.csv文件之后,选择Close(关闭)。
在创建访问密钥时,预设情况下,密钥对处于活动状态,并且您可以立即使用此密钥对。
相关主题•IAM用户指南中的什么是IAM?•AWS一般参考中的AWS安全凭证 第4步:为使用示例代码做好准备 本指南包括使用AWSSDKforJava。
要运行示例代码,请按照中的设置说明执行操作。
入门AWSSDKforJava2.0.您可以开发AWS其他编程语言的应用程序,例如Go、JavaScript、Python和Ruby。
有关更多信息,请参阅。
用于开发和管理应用程序的工具AWS. Note您无需使用以下工具编写代码即可探究AmazonSQS。
AWSCommandLineInterface(AWSCLI)或WindowsPowerShell。
您可以找到AWSCLI中的示例AmazonSQS部分的AWSCLI命令参考.您可以找到WindowsPowerShell的AmazonSimpleQueueService部分中的示例AWSToolsforPowerShellCmdlet参考. 后续步骤 您现在已准备好入门(p.7)使用管理AmazonSQS队列和消息AWSManagementConsole.
6 AmazonSimpleQueueService开发人员指南先决条件 开始使用AmazonSQS 本部分通过为您展示如何使用AmazonSQS控制台管理队列和消息,帮助您进一步熟悉AmazonSQS。
主题 •先决条件(p.7)•第1步:创建队列(p.7)•第2步:发送消息(p.7)•第3步:接收和删除消息(p.8)•第4步:删除队列(p.8)•后续步骤(p.9) 先决条件 在开始之前,请完成设置AmazonSQS(p.4)中的步骤。
第1步:创建队列 第一个也是最常见的AmazonSQS任务是创建队列。
本过程介绍如何创建和配置FIFO队列。

1.打开AmazonSQS控制台/sqs/.2.选择Createqueue(创建队列)。

3.在存储库的创建队列页面上,指定正确的区域。

4.这些区域有:标准默认情况下会选择队列类型。
选择FIFO. 创建队列后,您将无法更改队列类型。

5.输入名称为了您的队列。
FIFO队列的名称必须以.fifo后缀。

6.要使用默认参数创建队列,请滚动到底部并选择创建队列.AmazonSQS创建队列并显示队列的详细信 息页.AmazonSQS在整个系统中传播有关新队列的信息。
由于AmazonSQS是分布式系统,因此在队列显示在队列页. 第2步:发送消息 创建队列后,可以将消息发送到队列中。

1.从左侧导航窗格中选择队列.从队列列列表中选择您创建的队列。

2.从操作,选择发送和接收消息.
7 AmazonSimpleQueueService开发人员指南第3步:接收和删除消息 控制台将显示发送和接收消息页.3.在消息正文
4.输入消息组ID为队列。
有关更多信息,请参阅FIFO传送逻辑(p.28)。

5.(可选)输入消息重复数据删除ID.如果启用基于内容的重复数据消除,则不需要消息重复数据消除 ID。
有关更多信息,请参阅FIFO传送逻辑(p.28)。

6.选择SendMessage(发送消息)。
您的消息将发送,控制台将显示成功消息。
选择查看详细信息以显示有关已发送消息的信息。
第3步:接收和删除消息 将消息发送到队列中之后,可从队列中检索消息。
从队列请求消息时,您将无法指定要检索的消息。
而应指定要检索的最大消息数量(最多10条)。

1.从队列页面上,选择一个队列。

2.从队列操作,选择发送和接收消息. 控制台将显示发送和接收消息页.3.选择轮询消息。
AmazonSQS开始轮询服务器以查找队列中的消息。
右侧的进度条接收消息部分显示轮询持续时间。
这些区域有:消息部分显示收到的消息的列表。
对于每条消息,列表将显示消息ID、发送日期、大小和接收计数。

4.要删除消息,请选择要删除的消息,然后选择Delete.5.在删除消息对话框中,选择Delete. 第4步:删除队列
1.从队列列列表中选择您创建的队列。

2.从队列页面上,选择要删除的队列。

3.选择删除队列. 控制台将显示删除队列对话框。

4.在删除队列对话框中,输入以确认删除。
delete.
8 AmazonSimpleQueueService开发人员指南后续步骤
5.请选择Delete(删除)。
后续步骤 现在,您已创建了队列,并学会如何发送、接收和删除消息,以及如何删除队列,您可能想要尝试以下操作:•配置队列,包括SSE和其他功能(p.10).•发送带有属性的消息。
(p.20)•从VPC发送消息。
(p.90)•了解有关AmazonSQS工作流和流程的更多信息:Read队列的工作原理(p.24)、最佳实践(p.52), 和配额(p.94).您还可以探索AmazonSQS文章和教程.如果您有任何疑问,请浏览AmazonSQS常见问题或者参与AmazonSQS开发人员论坛.•了解如何以编程方式与AmazonSQS进行交互:Read使用API(p.148)探索示例代码和库和开发人员中心:•Java•JavaScript•PHP•Python•Ruby•Windows和.NET•在对AmazonSQS队列进行自动化和问题排查(p.98)部分中了解如何监控成本和资源。
•在安全性(p.99)部分中了解如何保护和访问您的数据。

9 AmazonSimpleQueueService开发人员指南了解AmazonSQS控制台 配置AmazonSQS队列(控制台) 使用AmazonSQS控制台可配置和管理AmazonSimpleQueueService(AmazonSQS)队列和功能。
您还可以使用控制台配置诸如服务器端加密、将死信队列与队列关联或设置触发器以调用AWSLambdafunction.主题 •了解AmazonSQS控制台(p.10)•创建AmazonSQS队列(控制台)(p.11)•编辑AmazonSQS队列(控制台)(p.12)•配置队列参数(控制台)(p.12)•配置访问策略(控制台)(p.13)•使用SQS拥有的加密密密钥为队列配置服务器端加密(SSE)(控制台)(p.14)•为队列配置服务器端加密(SSE)(p.14)•配置死信队列(控制台)(p.15)•配置死信队列重驱(控制台)(p.15)•为AmazonSQS队列配置成本分配标签(控制台)(p.16)•为AmazonSQS队列订阅AmazonSNS主题(控制台)(p.16)•配置队列以触发AWSLambda函数(控制台)(p.17) 了解AmazonSQS控制台 当您打开控制台时,请选择队列从导航窗格中显示队列页.这些区域有:队列页面提供了有关活动区域中所有队列的信息。
每个队列的条目显示队列类型和有关队列的其他信息。
这些区域有:类型列可帮助您一目了然地将标准队列与先进先出(FIFO)队列区分开标准队列。
从队列页面中,有两种方法可以对队列执行操作。
您可以选择队列名称旁边的选项,然后选择您要对队列执行的操作。
10 AmazonSimpleQueueService开发人员指南创建队列 你也可以选择队列名称,这将打开详细信息该队列的页面。
这些区域有:详细信息页面包含与队列页.此外,您可以选择以下选项卡之一详细信息部分以查看其他配置详细信息和操作。
创建AmazonSQS队列(控制台) 您可使用AmazonSQS控制台创建标准队列(p.26)和FIFO队列(p.26).控制台为除队列名称之外的所有设置提供默认值。
Important请勿在队列名称中添加个人身份信息(PII)或其他机密或敏感信息。
许多AmazonWebServices都可以访问队列名称,包括计费和CloudWatch日志。
队列名称不适合用于私有或敏感数据。
要创建AmazonSQS队列(控制台)
1.在以下位置打开AmazonSQS控制台/sqs/.2.选择Createqueue(创建队列)。

3.适用于类型,标准默认情况下设置队列类型。
要创建FIFO队列,请选择FIFO. Note在创建队列之后无法更改队列类型。

4.输入名称对于你的队列。
FIFO队列的名称必须以.fifo后缀。

5.(可选)控制台为队列设置默认值配置参数(p.12).在配置,您可以为以下参数设置新值:a.适用于可见性超时中,输入持续时间和单位。
范围为0秒到12小时。
默认值为30秒。
b.适用于消息保留期中,输入持续时间和单位。
范围从1分钟到14天。
默认值为4天。
c.适用于送达延迟中,输入持续时间和单位。
范围为0秒到15分钟。
默认值为0秒。
d.适用于最大消息大小中,输入一个值。
范围从1KB到256KB。
默认值为256KB。
e.适用于接收消息等待时间中,输入一个值。
范围为0到20秒。
默认值为0秒,设置短轮询(p.39).任何非零值都会设置长轮询。
f.对于FIFO队列,选择启用基于内容的重复数据启用基于内容的重复数据删除。
默认设置为禁用。
g.(可选)对于FIFO队列,要为队列中的消息发送和接收启用更高的吞吐量,请选择启用高吞吐量FIFO.选择此选项会更改相关选项(重复数据删除和FIFO吞吐量限制)转换为为FIFO队列启用高吞吐量所需的设置。
如果您更改了使用高吞吐量FIFO所需的任何设置,则队列的正常吞吐量将生效,并按指定进行重复数据删除。
有关更多信息,请参阅FIFO队列的高吞吐量(p.29)和与消息相关的配额(p.95)。
11 AmazonSimpleQueueService开发人员指南编辑队列 h.适用于重新驱动允许策略,选择允许所有(默认情况下),按队列要么全部拒绝.选择时按队列,指定最多10个源队列的列表,以Amazon资源名称(ARN)。

6.(可选)定义访问策略.这些区域有:访问策略(p.128)定义可访问队列的帐户、用户和角色。
访问策略还定义了操作(例如SendMessage、ReceiveMessage,或者DeleteMessage)用户可以访问。
默认策略只允许队列所有者发送和接收消息。
要定义访问策略,请执行以下操作之一: •选择基本以配置谁能向队列发送消息以及谁能从队列接收消息。
控制台根据您的选择创建策略,并在只读JSON面板中显示生成的访问策略。
•选择Advanced以直接修改JSON访问策略。
这允许您指定每个委托人(账户、用户或角色)可以执行的一组自定义操作。

7.(可选)配置加密(p.14)对于队列,展开加密.8.(可选)配置死信队列(p.15)要接收无法送达的消息,请展开死信队列.9.(可选)要添加标签(p.16)到队列中,展开标签.10.选择Createqueue(创建队列)。
AmazonSQS创建队列并显示队列的详细信息页. AmazonSQS在整个系统中传播有关新队列的信息。
由于AmazonSQS是分布式系统,所以在控制台在队列页. 创建队列后,你可以发送消息(p.19)对它来说,以及接收和删除消息(p.20).您还可以编辑(p.12)除队列类型之外的任何队列配置设置。
编辑AmazonSQS队列(控制台) 您可以使用AmazonSQS控制台编辑任何队列配置参数(队列类型除外)并添加或删除队列功能。
编辑AmazonSQS队列(控制台)
1.打开队列页控制台的AmazonSQS控制台。

2.选择队列,然后选择编辑.3.(可选)下配置,更新队列的配置参数(p.12).4.(可选)更新访问策略(p.13),在访问策略中,修改JSON策略。

5.(可选)添加、更新或删除加密(p.14),展开加密.6.(可选)添加、更新或删除死信队列(p.15)(允许您接收无法送达的消息),展开死信队列.7.(可选)添加、更新或删除标签(p.16)对于队列,展开标签.8.选择保存。
控制台会显示详细信息该队列的页面。
配置队列参数(控制台) 当您时创造(p.11)要么编辑(p.12)对于队列,您可以配置以下参数: •可见性超时—从队列(由一个消费者)收到的消息对其他消息使用者不可见的时间长度。
有关更多信息,请参阅。
可见性超时(p.44).Note 使用控制台配置可见性超时可以配置队列中所有消息的超时值。
要为单条或多条消息配置超时,必须使用AWSSDK。
12 AmazonSimpleQueueService开发人员指南配置访问策略 •消息保留期—AmazonSQS保留在队列中的消息的时间。
默认情况下,队列将消息保留四天。
您可以配置队列以将消息保留最多14天。
有关更多信息,请参阅。
消息保留期. •送达延迟—AmazonSQS在传送添加到队列中的消息之前延迟的时长。
有关更多信息,请参阅。
送达延迟(p.46). •最大消息大小—此队列的最大消息大小。
有关更多信息,请参阅。
最大消息大小(p.62).•接收消息等待时间—队列收到接收请求后,AmazonSQS等待消息可用的最长时间。
有关更多信息,请参 阅AmazonSQS短轮询和长轮询(p.39)。
•启用内容重复数据删除—AmazonSQS可以根据消息的正文自动创建重复数据删除ID。
有关更多信息, 请参阅AmazonSQSFIFO(先进先出)队列(p.26)。
•启用高吞吐量FIFO—用于为队列中的消息启用高吞吐量。
选择此选项会更改相关选项(重复数据删 除和FIFO吞吐量限制)转换为为FIFO队列启用高吞吐量所需的设置。
有关更多信息,请参阅FIFO队列的高吞吐量(p.29)和与消息相关的配额(p.95)。
•重新驱动允许策略:定义哪些源队列可以使用此队列作为死信队列。
有关更多信息,请参阅AmazonSQS死信队列(p.41)。
为现有队列配置队列参数(控制台)
1.在打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。
选择队列然后选择编辑.3.滚动至配置部分。

4.适用于可见性超时中,输入持续时间和单位。
范围为0秒至12小时。
默认值为30秒。

5.适用于消息保留期中,输入持续时间和单位。
范围为1分钟至14天。
默认值为4天。

6.适用于送达延迟中,输入持续时间和单位。
范围为0秒至15分钟。
默认值为0秒。

7.适用于最大消息大小,输入一个值。
范围为1KB到256KB。
默认值为256KB。

8.对于标准队列,输入一个值接收消息等待时间.范围为0至20秒。
默认值为0秒,它设置短轮 询(p.39).任何非零值都会设置长轮询。

9.对于FIFO队列,您可以选择启用内容重复数据删除启用基于内容的重复数据删除。
默认设置为禁用。
10.(可选)对于FIFO队列,要为队列中的消息发送和接收启用更高的吞吐量,请选择启用高吞吐量 FIFO. 选择此选项会更改相关选项(重复数据删除和FIFO吞吐量限制)转换为为FIFO队列启用高吞吐量所需的设置。
如果您更改了使用高吞吐量FIFO所需的任何设置,则队列的正常吞吐量将生效,并按指定进行重复数据删除。
有关更多信息,请参阅FIFO队列的高吞吐量(p.29)和与消息相关的配额(p.95)。
11.适用于重新驱动允许策略,选择允许所有(默认情况下),按队列要么拒绝所有.选择时按队列中,指定最多10个源队列的列表(通过Amazon资源名称(ARN)。
12.配置完队列参数后,选择Save(保存). 配置访问策略(控制台) 当您时编辑(p.12)一个队列,你可以配置其访问策略。
访问策略定义了可以访问队列的帐户、用户和角色。
访问策略还定义了操作(例如SendMessage、ReceiveMessage,或者DeleteMessage)用户可以访问。
默认策略只允许队列所有者发送和接收消息。
为现有队列配置访问策略(控制台)
1.从打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。
13 AmazonSimpleQueueService开发人员指南为队列配置SSE-SQS
3.选择队列然后选择编辑.4.滚动到访问策略部分。

5.在输入框中编辑访问策略声明。

6.完成访问策略的配置后,选择Save(保存). 使用SQS拥有的加密密密钥为队列配置服务器端加密(SSE)(控制台) AmazonSQS托管SSE(SSE-SQS)是托管服务器端加密,它使用SQS拥有的加密密钥来保护通过消息队列发送的敏感数据。
使用SSE-SQS,您无需创建和管理加密密钥,也不需要修改代码来加密数据。
SSESQS可让您安全地传输数据,并帮助您满足严格的加密合规性和监管要求,而无需额外费用。
SSE-SQS使用256位高级加密标准(AES-256)加密保护静态数据。
一旦AmazonSQS收到消息,SSE就会对消息进行加密。
AmazonSQS以加密形式存储消息,仅当发送给授权使用者时,才会对消息进行解密。
为队列配置SSE-SQS加密(控制台)
1.从打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.选择队列,然后选择编辑.4.Expand加密.5.适用于服务器端加密,选择Enabled(已启用).6.SelectAmazonSQS密钥(SSE-SQS).使用此选项不额外收费。

7.选择保存。
为队列配置服务器端加密(SSE) 为了保护队列消息中的数据,您可以为队列启用服务器端加密(SSE)。
AmazonSQS与AmazonWebServices密钥管理服务(AmazonWebServicesKMS)集成进行管理KMS密钥用于服务器端加密(SSE)。
有关使用SSE的信息,请参阅静态加密(p.100). 您分配给队列的KMS密钥必须具有密钥策略,其中包括授权使用队列的所有委托人的权限。
想要了解有关信息,请参阅密钥管理(p.102). 如果您不是KMS密钥的拥有者,或者您使用没有的帐户登录kms:ListAliases和kms:DescribeKey权限,则无法在AmazonSQS控制台上查看有关KMS密钥的信息。
要求KMS密钥拥有者授予您这些权限。
有关更多信息,请参阅。
密钥管理(p.102). 当您时创造(p.11)要么编辑(p.12)一个队列,你可以配置SSE-KMS。
为现有队列配置SSE-KMS(控制台)
1.在以下位置打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.选择队列,然后选择编辑.4.Expand加密.5.适用于服务器端加密,选择Enabled(已启用).6.SelectAWS密钥管理服务密钥(SSE-KMS). 14 AmazonSimpleQueueService开发人员指南配置死信队列 控制台会显示说明,账户,以及KMS密钥ARN的KMS密钥。

7.指定队列的KMS密钥ID。
有关更多信息,请参阅关键术语(p.101)。
a.选择选择KMS密钥别名选项。
b.默认密钥是AmazonSQS的AmazonWebServices托管KMS密钥。
要使用此密钥,请从KMS密 钥list。
c.要使用AmazonWebServices账户中的自定义KMS密钥,请从KMS密钥list。
有关创建自定义 KMS密钥的说明,请参阅创建密钥中的AmazonService密钥管理服务开发人员指南.d.要使用列表中不在的自定义KMS密钥或其他AmazonWebServices账户中的自定义KMS密钥, 请选择输入KMS密钥别名然后输入KMS密钥AmazonResourceName(ARN)。

8.(可选)对于数据密钥重用周期中,指定一个介于1分钟到24小时之间的值。
默认值为5分钟。
有关 更多信息,请参阅了解数据密钥重用周期(p.105)。

9.配置完SSE-KMS后,选择Save(保存). 配置死信队列(控制台) 一个死信队列是一个或多个源队列可以用于未成功使用的消息的队列。
有关更多信息,请参阅AmazonSQS死信队列(p.41)。
确实AmazonSQS不自动创建死信队列。
您必须先创建队列,然后才能将其用作死信队列。
FIFO队列的死信队列也必须是FIFO队列。
同样,标准队列的死信队列也必须是标准队列。
当您时创造(p.11)要么编辑(p.12)您可以配置死信队列。
要为某个现有队列配置死信队列(控制台)
1.在打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.选择队列然后选择编辑.4.滚动到死信队列选择部分并选择Enabled(已启用).5.选择某个现有的Amazon资源名称(ARN)死信队列您要关联到此源队列。

6.要配置消息在发送到死信队列之前可接收的次数,请设置最大接收数到1到1000之间的值。

7.配置完死信队列后,请选择Save(保存). 保存队列后,控制台将显示详细信息您的队列页面。
在存储库的详细信息页面,死信队列选项卡显示最大接收数和死信队列在ARN死信队列. 配置死信队列重驱(控制台) 您可以配置重新驱动死信队列将标准未使用的消息从现有死信队列中移回其源队列。
有关死信队列重新驱动的更多信息,请参阅将消息移出死信队列(p.43). 为现有标准队列(控制台)配置死信队列重驱
1.在打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.选择已配置为的队列的名称死信队列(p.15).4.选择开始DLQ重新驱动.5.UDLE重新驱动器配置,对于消息目标对于,执行以下任一操作: 15 AmazonSimpleQueueService开发人员指南为队列配置标签 •要将消息重新驱动到其源队列,请选择重新开车到源队列.•要将消息重新驱动到另一个队列,请选择重新开车到自定义目的地.然后,输入现有目标队列的 Amazon资源名称(ARN)。

6.UDLEVelocity控制设置中,选择下列选项之一: •优化系统-以每秒最大消息数重新驱动死信队列消息。
•自定义最大速度-使用自定义的每秒最大消息速率重新驱动死信队列消息。
允许的最大速率为每秒500条消息。

7.配置死信队列后,选择重新驱动消息.Important AmazonSQS仅支持AmazonSQS控制台中的标准队列重新驱动死信队列。
AmazonSQS不支持在从死信队列中重新驱动消息时过滤和修改消息。
死信队列重新驱动任务最多可以运行36小时。
AmazonSQS支持每个账户最多100个活动的重新驱动任务。
重新驱动程序任务将重置保留期。
新messageID和enqueueTime被分配给重新驱动的消息。

8.如果要取消消息重新驱动任务,请在详细信息您的队列页面,选择取消DLQ重新驱动器.取消正在进行的消息重新驱动时,已成功移动到移动目标队列的任何邮件都将保留在目标队列中。
为AmazonSQS队列配置成本分配标签(控制台) 要帮助组织和标识AmazonSQS队列,您可以向这些队列添加标签。
有关更多信息,请参阅AmazonSQS成本分配标签(p.39)。
在存储库的详细信息对于队列的页面,标记选项卡显示队列的标签。
当您时创造(p.11)要么编辑(p.12)一个队列,你可以为它配置标签。
为现有队列配置标签(控制台)
1.在以下位置打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.选择队列然后选择编辑.4.滚动到标签部分。

5.添加、修改或删除队列标签: a.要添加标签,请选择添加新标签,请输入密钥和值选择,然后选择添加新标签.b.要更新标签,请更改标签。
密钥和值.c.要删除标签,请选择Remove在键值对旁边。

6.完成标签配置后,选择Save(保存). 为AmazonSQS队列订阅AmazonSNS主题(控制台) 您可以为一个或多个AmazonSQS队列订阅AmazonSimpleNotificationService(AmazonSNS)主题。
当您向一个主题发布消息时,AmazonSNS会向每个已订阅队列发送此消息。
AmazonSQS管理订阅和所有必要的权限。
有关AmazonSNS的更多信息,请参阅什么是AmazonSimpleNotificationService?中的AmazonSimpleNotificationService开发者指南. 16 AmazonSimpleQueueService开发人员指南配置Lambda触发器 为AmazonSQS队列订阅SNS主题时,AmazonSNS会使用HTTPS将消息转发到AmazonSQS。
有关将AmazonSNS与加密AmazonSQS队列结合使用的信息,请参阅配置AWS服务的KMS权限(p.102). 为队列订阅SNS主题(控制台)
1.从打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.从队列列表中,选择要订阅SNS主题的队列。

4.从操作,选择订阅AmazonSNS主题.5.从为此队列指定可用的AmazonSNS主题菜单中,选择队列的SNS主题。
如果菜单中没有列出SNS主题,请选择输入AmazonSNS主题ARN然后输入主题的Amazon资源名称(ARN)。

6.选择保存。

7.要验证订阅结果,请发布到主题,然后查看主题发送到队列的消息。
有关更多信息,请参阅。
将消息发布到AmazonSNS主题中的AmazonSimpleNotificationService开发者指南. 如果您的AmazonSQS队列和SNS主题不同AWS账户,主题所有者必须首先确认订阅。
有关更多信息,请参阅。
确认订阅中的AmazonSimpleNotificationService开发者指南. 有关订阅跨区域SNS主题的信息,请参阅将AmazonSNS消息发送到AmazonSQS队列或AWSLambda在另一个区域中发挥作用中的AmazonSimpleNotificationService开发者指南 配置队列以触发AWSLambda函数(控制台) 您可以使用AWSLambda函数处理AmazonSQS队列中的消息。
Lambda轮询队列并同步调用您的Lambda函数,其中有包含队列消息的事件。
您可以指定另一个队列充当死信队列用于Lambda函数无法处理的消息。
一个Lambda函数可以处理来自多个队列的项(每个队列使用一个Lambda事件源)。
您可以将同一队列用于多个Lambda函数。
如果您将加密队列与Lambda函数关联但Lambda没有轮询消息,请添加kms:Decrypt授予Lambda执行角色的权限。
注意以下限制: •您的队列和Lambda函数必须位于同一位置AWS区域。
•网络ACL和安全组都允许(因此可到达您的实例)的发起ping的加密队列(p.100)使用默认密钥 (AWSAmazonSQS的托管KMS密钥)无法在其他方面调用Lambda函数AWS账户. 有关实施Lambda函数的信息,请参阅使用AWSLambda使用AmazonSQS中的AWSLambda开发人员指南. 先决条件 要配置Lambda函数触发器,您必须满足以下要求: •如果您使用IAM用户,AmazonSQS角色必须包括以下权限:•lambda:CreateEventSourceMapping•lambda:ListEventSourceMappings•lambda:ListFunctions 17 AmazonSimpleQueueService开发人员指南先决条件 •Lambda执行角色必须包括以下权限:•sqs:DeleteMessage•sqs:GetQueueAttributes•sqs:ReceiveMessage •如果您将加密队列与Lambda函数关联,请添加kms:Decrypt对Lambda执行角色的权限。
有关更多信息,请参阅管理AmazonSQS中的访问概述(p.109)。
要配置队列以触发Lambda函数(控制台)
1.在打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.在存储库的队列页面中,选择要配置的队列。

4.在队列页面上,选择Lambda触发器选项卡。

5.在存储库的Lambda触发器页面中,选择Lambda触发器。
如果列表中不包含您需要的Lambda触发器,请选择配置Lambda函数触发器.输入Lambda函数的Amazon资源名称(ARN)或选择现有资源。
然后选择Save(保存)。

6.选择保存。
控制台保存配置并显示详细信息该队列的页面。
在存储库的详细信息页面,Lambda触发器选项卡显示Lambda函数及其状态。
Lambda函数大约需要1分钟时间与队列关联。

7.要验证配置的结果,向队列发送消息(p.19)然后在Lambda控制台查看触发的Lambda函数。
18 AmazonSimpleQueueService开发人员指南发送消息 管理AmazonSQS队列(控制台) 创建和配置队列后,您可以使用AmazonSQS控制台向队列发送消息并从队列中检索消息。
主题 •将消息发送到队列(控制台)(p.19)•发送带有属性的消息(控制台)(p.20)•接收和删除消息(控制台)(p.20)•清除AmazonSQS队列中的消息(控制台)(p.21)•删除AmazonSQS队列(p.21)•确认队列为空(p.22) 将消息发送到队列(控制台) 创建队列后,您可以向队列发送消息。
发送消息(控制台)
1.在以下位置打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.在存储库的队列页面上,选择队列。

4.从操作,选择发送和接收消息. 控制台将显示发送和接收消息页.5.在消息正文,输入消息文本。

6.对于先进先出(FIFO)队列,输入消息组ID.有关更多信息,请参阅FIFO传送逻辑(p.28)。

7.(可选)对于FIFO队列,可以输入消息重复数据删除ID.如果为队列启用基于内容的重复数据删除, 则不需要消息重复数据删除ID。
有关更多信息,请参阅FIFO传送逻辑(p.28)。

8.(可选)对于标准队列,可以输入送达延迟然后选择单位。
例如,输入60然后选择秒.FIFO队列不支持 单个消息上的计时器。
有关更多信息,请参阅AmazonSQS消息定时器(p.51)。

9.选择SendMessage(发送消息)。
发送消息后,控制台将显示成功消息。
选择查看详细信息以显示有关已发送消息的信息。
19 AmazonSimpleQueueService开发人员指南消息属性 发送带有属性的消息(控制台) 对于标准队列和FIFO队列,您可在消息中包含结构化元数据(如时间戳、地理空间数据、签名和标识符)。
有关更多信息,请参阅AmazonSQS消息属性(p.36)。
将带有属性的消息发送至队列(控制台)
1.在打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.在存储库的队列页面上,选择队列。

4.从操作,选择发送和接收消息.5.输入消息属性参数。
a.在名称文本框中,输入最多256个字符的唯一名称。
b.对于属性类型,请选择字符串、数字,或者二进制.c.(可选)输入自定义数据类型。
例如,您可以添加byte、int,或者float作为自定义数据类型数 字.d.在值文本框中,输入消息属性值。

6.要添加另一个消息属性。
请选择添加新属性.
7.您可在发送消息之前随时修改属性值。

8.要删除属性,请选择Remove.要删除第一个属性,请关闭消息属性.9.完成将属性添加到消息中之后,选择发送消息.您的消息已发送,控制台将显示成功消息。
要查看有关已 发送消息的消息属性的信息,请选择查看详细信息.选择Done关闭消息细节对话框。
接收和删除消息(控制台) 向队列发送消息后,您可以接收和删除它们。
向队列请求消息时,您不能指定要检索哪些消息。
而应指定要检索的最大消息数量(最多10条)。
Note由于AmazonSQS是一个分布式系统,因此只有极少的消息的队列可能会显示对接收请求的空响应。
在这种情况下,请重新运行请求以获取消息。
根据您的应用程序的需求,您可能必须使用短轮询或长轮询(p.39)接收消息。
在为AmazonSQS检索消息之后不会自动删除它,以防您未成功地接收消息(例如,如果使用者出现故障或者您断开连接)。
要删除某个消息,您必须发送确认您已成功接收并处理该消息的单独请求。
请注意,您必须收到一条消息,然后才能将其删除。
20 AmazonSimpleQueueService开发人员指南清除队列 Note从AmazonSQS控制台接收消息后,控制台会立即将消息设置为可见,以便可以再次接收消息。
要接收消息和删除消息(控制台)
1.在打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.在存储库的队列页面上,选择队列。

4.从操作,选择发送和接收消息. 控制台将显示发送和接收消息页.5.选择轮询消息. AmazonSQS开始轮询队列中的消息。
右侧的进度条接收消息部分显示轮询的持续时间。
这些区域有:消息部分显示收到的消息的列表。
对于每条消息,该列表将显示消息ID、发送日期、大小和接收计数。

6.要删除消息,请选择要删除的消息,然后选择Delete.7.在删除消息选择对话框中,选择Delete. 清除AmazonSQS队列中的消息(控制台) 如果您不想删除AmazonSQS队列,但需要删除队列中的所有消息,请使用清除队列。
消息删除过程最多需要60秒。
我们建议您等待60秒,无论您的队列的大小如何。
Important当您清除队列时,您不能检索任何已删除的消息。
清除队列(控制台)
1.从打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.在存储库的队列页面中,选择要清除的队列。

4.选择清除.5.在清除队列对话框中,输入确认清除purge然后选择清除.所有消息将从队列中清除。
控制台显示确认横幅。
删除AmazonSQS队列 如果您不再使用AmazonSQS队列并且预计不会在不久的将来使用它,我们建议将其删除。
21 AmazonSimpleQueueService开发人员指南确认队列为空 Tip 如果要在删除队列之前验证队列是空的,请参阅确认队列为空(p.22).您可以删除队列,即使它不为空。
要删除队列中的消息,但不删除队列本身,清除队列(p.21). 删除队列(控制台)
1.从打开AmazonSQS控制台/sqs/.2.在导航窗格中,选择Queues(队列)。

3.在存储库的队列页面上,选择要删除的队列。

4.选择Delete(删除)。

5.在删除队列对话框中,输入以确认删除delete.6.选择Delete(删除)。
删除队列(AWSCLIAWSAPI)您可以使用以下命令之一删除队列:•AWSCLI:awssqsdelete-queue•AWSAPI:DeleteQueue 确认队列为空 大多数情况下,您可以使用长轮询(p.40)以确定队列为空。
在极少数情况下,即使队列仍包含消息,也可能会收到空响应,尤其是如果您为接收消息等待时间当您创建队列时。
此部分介绍如何确认队列为空。
确认队列为空(控制台)
1.阻止所有制作者发送消息。

2.在打开AmazonSQS控制台/sqs/.3.在导航窗格中,选择Queues(队列)。

4.在存储库的队列页面上,选择队列。

5.选择监控选项卡。

6.在监控仪表板的右上角,选择刷新符号旁边的向下箭头。
从下拉菜单中,选择自动刷新.离开刷新间 隔在1分钟.7.观察以下仪表板: •延迟的消息大概数•不可见的消息大致数•可见消息的大致数量 当他们都显示时0值为数分钟,说明队列为空。
要确认队列为空(AWSCLI、AWSAPI)
1.阻止所有制作者发送消息。

2.重复运行以下命令之一: •AWSCLI:get-queue-attributes 22 AmazonSimpleQueueService开发人员指南确认队列为空 •AWSAPI:GetQueueAttributes3.观察以下属性的指标: •ApproximateNumberOfMessagesDelayed•ApproximateNumberOfMessagesNotVisible•ApproximateNumberOfMessages什么时候都是0在数分钟内队列为空。
如果你依靠亚马逊CloudWatch指标,请确保在考虑该队列为空之前看到多个连续的零数据点。
有关CloudWatch指标,请参阅AmazonSQS的可用CloudWatch指标(p.141). 23 AmazonSimpleQueueService开发人员指南基本架构 AmazonSQS的运作原理 本节描述AmazonSQS队列的类型及其基本属性。
它还描述了队列和消息的标识符以及各种队列和消息管理工作流程。
主题 •AmazonSQS架构(p.24)•AmazonSQS标准队列(p.26)•AmazonSQSFIFO(先进先出)队列(p.26)•AmazonSQS队列和消息标识符(p.34)•消息元数据(p.35)•处理AmazonSQS消息所需的资源(p.38)•列出队列分页(p.39)•AmazonSQS成本分配标签(p.39)•AmazonSQS短轮询和长轮询(p.39)•AmazonSQS死信队列(p.41)•AmazonSQS可见性超时(p.44)•AmazonSQS延迟队列(p.46)•AmazonSQS临时队列(p.47)•AmazonSQS消息定时器(p.51) AmazonSQS架构 此部分概述了分布式消息传送系统的组成部分并说明AmazonSQS消息的生命周期。
分布式队列 分布式消息传送系统有三个主要组成部分:分布式系统的组件、队列(分布在AmazonSQS服务器上)以及队列中的消息。
在以下情况中,你的系统有几个生产商们(向队列发送消息的组件)以及消费者们(接收来自队列的消息的组件)。
队列(保存从A到E的消息)在多个AmazonSQS服务器上冗余存储消息。
24 AmazonSimpleQueueService开发人员指南消息生命周期 消息生命周期 以下场景介绍了AmazonSQS消息在队列中从创建到删除的整个生命周期。
创建者(Component1)将MessageA发送到一个队列,该消息在AmazonSQS服务器间冗余分布。
使用者(Component2)准备好处理消息时,就从队列使用消息,然后返回MessageA。
在处理MessageA期间,它仍保留在队列中,并且在可见性超时(p.44)期间不返回至后续接收请求。
使用者(Component2)从队列中删除MessageA,以阻止该消息在可见性超时过期后被再次接收和处理。
NoteAmazonSQS会自动删除在队列中已过了最大消息保存期的消息。
默认的消息保存期为4天。
不过,您可使用SetQueueAttributes操作将消息保存期设为介于60秒和1209600秒(14天)之间的值。
25 AmazonSimpleQueueService开发人员指南标准队列 AmazonSQS标准队列 AmazonSQS提供了标准的默认队列类型为。
标准队列的每个API操作(SendMessage、ReceiveMessage或DeleteMessage)每秒支持接近无限的API调用。
标准队列支持至少一次消息传递。
但是,由于存在允许近乎无限吞吐量的高度分布式架构,偶尔会有一条消息的多个副本不按顺序传送。
标准队列会尽最大努力进行排序,保证了消息大致按其发送的顺序进行传递。
有关如何使用AmazonSQS控制台创建和配置队列的信息,请参阅。
创建AmazonSQS队列(控制台)(p.11).有关Java示例,请参阅AmazonSQSJavaSDK示例(p.58). 您可以在很多情况下使用标准消息队列,只要应用程序能够处理多次到达和不按顺序到达的消息,例如:•将实时用户请求与密集型后台工作分离—让用户在调整媒体大小或对媒体编码时上传媒体。
•将任务分配到多个工作节点—处理大量信用卡验证请求。
•Batch处理消息以供将来处理—计划要添加到数据库的多个条目。
有关与标准队列相关的配额,请参阅与队列相关的配额(p.94). 有关使用标准队列的最佳实践,请参阅。
针对AmazonSQS标准队列和FIFO队列的建议(p.52). 消息排序 标准队列会尽量保持消息顺序,但可能有一条消息的多个副本可能不按顺序传送。
如果您的系统要求保留该订单,我们建议使用FIFO(先进先出)队列(p.26)或者在每条消息中添加排序信息,以便在收到消息后对其重新排序。
至少一次传递 AmazonSQS会在多台服务器上存储消息的副本,以实现冗余和高可用性。
在极少数情况下,当您接收或删除消息时,存储消息副本的某台服务器可能不可用。
如果出现这种情况,则该不可用服务器上的消息副本将不会被删除,并且您在接收消息时可能会再次获得该消息副本。
将应用程序设计为幂等应用程序(多次处理同一消息时,它们不应受到不利影响)。
AmazonSQSFIFO(先进先出)队列 FIFO队列具有标准队列(p.26). FIFO(先进先出)队列能在操作和事件的顺序很重要或者不能容忍重复消息的情况下改善应用程序之间的消息收发。
您可能使用FIFO队列的情况示例如下:•确保按正确的顺序运行用户输入的命令。
•通过按正确的顺序发送价格修改来显示正确的产品价格。
•防止学员在注册账户之前参加课程。
FIFO队列还提供“只执行一次”的处理,但每秒事务数(TPS)有限。
有关吞吐量配额的信息,请参阅与消息相关的配额(p.95). Note FIFO队列的名称必须以.fifo后缀。
后缀计入80个字符的队列名称配额。
确定队列是否为FIFO(p.26),您可以检查队列名称是否以后缀结尾。
26 AmazonSimpleQueueService开发人员指南消息排序 AmazonSQSFIFO队列在所有提供的区域AmazonSQS可用。
有关如何使用AmazonSQS控制台创建和配置队列的信息,请参阅。
创建AmazonSQS队列(控制台)(p.11).有关Java示例,请参阅AmazonSQSJavaSDK示例(p.58). 有关使用FIFO队列的最佳实践,请参阅关于AmazonSQSFIFO队列的其他建议(p.55)和针对AmazonSQS标准队列和FIFO队列的建议(p.52). 有关客户端和服务与FIFO队列的兼容性的信息,请参阅。
兼容性(p.34).主题 •消息排序(p.27)•关键术语(p.27)•FIFO传送逻辑(p.28)•确切一次处理(p.28)•从标准队列移至FIFO队列(p.29)•FIFO队列的高吞吐量(p.29)•兼容性(p.34) 消息排序 FIFO队列的改进和补充标准队列(p.26).此队列类型最重要的特性是FIFO(先进先出)交付(p.28)和处理一次性(p.28):•发送和接收消息的顺序严格保持一致;一条消息传送一次后就保持可用,直到使用者处理并删除它为止。
•不会将重复项引入到队列中。
此外,FIFO队列支持消息组允许一个队列中存在多个有序的消息组。
FIFO队列中的消息组数量没有配额。
关键术语 以下关键术语有助于您更好地了解FIFO队列的功能。
有关更多信息,请参阅。
AmazonSimpleQueueServiceAPI参考.消息重复数据删除ID 用于对已发送消息进行重复数据删除的令牌。
如果成功发送具有特定消息重复数据消除ID的消息,则使用相同消息重复数据消除ID发送的任何邮件都将成功接受,但不会在5分钟的重复数据删除间隔内传送。
Note 消息重复数据删除适用于整个队列,而不是单个消息组。
AmazonSQS继续跟踪消息重复数据删除ID,即使在接收和删除消息之后也是如此。
消息组ID 指定消息属于特定消息组的标签。
属于同一消息组的消息始终按相对于消息组的严格顺序逐个处理(但是,属于不同消息组的消息可能会失序处理)。
接收请求尝试ID 用于重复数据删除的令牌ReceiveMessage调用。
27 AmazonSimpleQueueService开发人员指南FIFO传送逻辑 序列号 AmazonSQS为每条消息分配的非连续大号码。
FIFO传送逻辑 以下概念可帮助您更好地了解FIFO的消息收发。
发送消息 如果将多条消息连续发送到FIFO队列,并且每条消息具有不同的消息重复数据删除ID,则AmazonSQS将存储这些消息并确认传输。
然后,可按传输每条消息的确切顺序接收和处理消息。
在FIFO队列中,消息根据消息组ID进行排序。
如果多台主机(或同一主机上的不同线程)将具有相同消息组ID的消息发送到FIFO队列,则AmazonSQS将按消息到达以供处理的顺序存储消息。
要确保AmazonSQS保留发送和接收消息的顺序,每位创建者应使用唯一的消息组ID来发送其所有消息。
FIFO队列逻辑仅应用于每个消息组ID。
每个消息组ID代表AmazonSQS队列中的不同的有序的消息组。
对于每一个消息组ID,所有消息的发送和接收均严格遵循一定的顺序。
但是,具有不同的消息组ID值的消息可能不会按顺序发送和接收。
您必须将消息组ID与消息关联。
如果您未提供消息组ID,此操作将失败。
如果需要一组有序的消息,请为要将消息发送到FIFO队列提供相同的消息组ID。
接收消息 您无法请求接收具有特定消息组ID的消息。
当接收来自具有多个消息组ID的FIFO队列的消息时,AmazonSQS首先会尝试尽可能多地返回具有相同消息组ID的消息。
这时其他使用者能处理具有不同消息组ID的消息。
当您收到带有消息组ID的消息时,除非删除消息或变为可见消息,否则不再返回同一消息组ID的消息。
Note 可使用MaxNumberOfMessages操作的ReceiveMessage请求参数在单次调用中接收多达10条消息。
这些消息将保留其FIFO顺序且可具有相同的消息组ID。
因此,如果具有相同消息组ID的消息少于10条,则您可接收来自属于10条消息的同一批中其他消息组ID的消息,但仍按FIFO顺序。
多次重试 FIFO队列允许生产者或消费者尝试多次重试:•如果生产者检测到失败SendMessage操作时,它可以使用相同的消息重复数据消除ID,根据需要多 次重试发送。
假设生产者在重复数据消除间隔到期之前至少收到一个确认,则多次重试既不影响消息的顺序,也不会引入重复项。
•如果消费者检测到失败ReceiveMessage操作,它可以根据需要使用相同的接收请求尝试ID重试多次。
假设消费者在可见性超时到期之前至少收到一个确认,则多次重试不会影响消息的顺序。
•当您收到带有消息组ID的消息时,除非删除消息或变为可见消息,否则不再返回同一消息组ID的消息。
确切一次处理 不同于标准队列,FIFO队列不会引入重复消息。
FIFO队列可帮助您避免向队列发送重复消息。
如果你重试SendMessage在5分钟重复数据删除时间间隔内操作,AmazonSQS不会将任何重复消息引入队列。
要配置重复数据删除,必须执行以下操作之一: •启用基于内容的重复数据删除。
这将指示AmazonSQS使用SHA-256哈希通过消息的正文(而不是消息的属性)生成消息重复数据删除ID。
有关更多信息,请参阅CreateQueue、GetQueueAttributes,和SetQueueAttributes中的操作AmazonSimpleQueueServiceAPI参考. 28 AmazonSimpleQueueService开发人员指南从标准队列移至FIFO队列 •为消息显式提供消息重复数据删除ID(或查看序列号)。
有关更多信息,请参阅SendMessage、SendMessageBatch,和ReceiveMessage中的操作AmazonSimpleQueueServiceAPI参考. 从标准队列移至FIFO队列 如果有使用标准队列的现有应用程序并想要利用FIFO队列的排序或确切一次处理功能,则需要正确地配置队列和应用程序。
Note 您无法将现有标准队列转换为FIFO队列。
要实现移动,必须为应用程序创建新的FIFO队列,或者删除现有标准队列并重新将其创建为FIFO队列。
要确保您的应用程序能够正常使用FIFO队列,请使用以下清单: •如果您使用一批(p.153),FIFO队列的每个API方法每秒最多支持3,000条消息(SendMessageBatch、ReceiveMessage,或者DeleteMessageBatch)。
每秒3000条消息代表300条API调用,每个调用带有包含10条消息的一个批处理。
要申请提高配额,请提交支持请求。
在不使用批处理的情况下,FIFO队列的每个API方法(SendMessage、ReceiveMessage或DeleteMessage)每秒最多支持300个API调用。
•FIFO队列不支持每消息延迟,仅支持每队列延迟。
如果您的应用程序在每条消息上设置相同的DelaySeconds参数值,您必须将应用程序修改为删除每消息延迟并改为在整个队列上设置DelaySeconds。
•发送到FIFO队列的每条消息都需要一个消息组ID。
如果您不需要多个有序的消息组,请为您的所有消息指定相同的消息组ID。
•在将消息发送到FIFO队列之前,请确认以下内容:•如果您的应用程序可发送具有相同的消息正文的消息,您可以将应用程序修改为针对每条已发送消息提供唯一的消息重复数据删除ID。
•如果您的应用程序发送具有独特的消息正文的消息,您可以启用基于内容的重复数据删除。
•您不必对使用者进行任何代码更改。
但是,如果处理消息需要较长时间且您的可见性超时已设置为一个较高值,请考虑向每个ReceiveMessage操作添加接收请求尝试ID。
这允许您在网络发生故障时重试接收尝试,并防止队列由于接收尝试失败而导致的暂停。
有关更多信息,请参阅。
AmazonSimpleQueueServiceAPI参考. FIFO队列的高吞吐量 对于高吞吐量FIFO队列(p.26)支持每个API每秒更多的请求数量。
要在高吞吐量的情况下增加FIFO队列的请求数,可以增加使用的消息组的数量。
每个消息组每秒支持300个请求。
有关FIFO配额具有高吞吐量的每队列配额的信息,请参阅与消息相关的配额(p.95)和为SQSFIFO队列实现高吞吐量的分区和数据分配(p.30). 您可以为任何新的或现有的FIFO队列启用高吞吐量。
创建和编辑FIFO队列时,该功能包括三个新选项: •启用高吞吐量FIFO—为当前FIFO队列中的消息提供更高的吞吐量。
•数据删除作用域—指定是在队列级别还是在消息组级别进行重复数据删除。
•FIFO吞吐量限制—指定FIFO队列中消息的吞吐量配额是在队列还是消息组级别设置。
为FIFO队列启用高吞吐量(控制台)
1.启动创建(p.11)要么编辑(p.12)FIFO队列。
29 AmazonSimpleQueueService开发人员指南FIFO队列的高吞吐量
2.为队列指定选项时,选择启用高吞吐量FIFO.为FIFO队列启用高吞吐量可以设置以下相关选项:•数据删除作用域设置为消息组,为FIFO队列使用高吞吐量所需的设置。
•FIFO吞吐量限制设置为每消息组ID,为FIFO队列使用高吞吐量所需的设置。
如果您更改了对FIFO队列使用高吞吐量所需的任何设置,则队列的正常吞吐量将生效,并按指定进行重复数据删除。

3.继续为队列指定所有选项。
完成后,选择创建队列要么Save(保存).创建或编辑FIFO队列后,你可以发送消息(p.19)对它来说接收和删除消息(p.20),所有这些都是更高的TPS。
为SQSFIFO队列实现高吞吐量的分区和数据分配 AmazonSQS将FIFO队列数据存储在分区中。
一个分割是为队列分配的存储,队列在AWS区域。
您不管理分区。
相反,AmazonSQS处理分区管理。
对于FIFO队列,在以下情况下,AmazonSQS会修改队列中的分区数量:•如果当前的请求速率接近或超过现有分区可支持的速度,则会分配额外的分区,直到队列达到区域配额为 止。
有关配额的信息,请参阅与消息相关的配额(p.95).•如果当前分区的利用率较低,则分区的数量可能会减少。
分区管理在后台自动进行,对程序是透明的。
您的队列和消息始终可用。
按消息组ID分发数据 要向FIFO队列添加消息,AmazonSQS使用每条消息的消息组ID的值作为内部哈希函数的输入。
散列函数的输出值决定了哪个分区存储消息。
下图显示了跨多个分区的队列。
队列的消息组ID基于项目编号。
AmazonSQS使用其哈希函数决定新项目的存储位置;在这种情况下,它将基于字符串的哈希值。
item0.请注意,这些项目的存储顺序与添加到队列的顺序相同。
每个项目的位置由其消息组ID的哈希值决定。
30 AmazonSimpleQueueService开发人员指南FIFO队列的高吞吐量 31 AmazonSimpleQueueService开发人员指南FIFO队列的高吞吐量 NoteAmazonSQS经过优化,不论分区数如何,都可在FIFO队列的分区上统一分配项目。
AWS建议您使用具有大量不同值的消息组ID。
优化分区利用率 每个分区每秒支持最多3000条消息(带有批处理)或者每秒支持最多300条消息用于发送、接收和删除操作。
使用批处理API时,每条消息都会根据中所述的流程进行路由按消息组ID分发数据(p.30).路由到同一个分区的消息在单个事务中进行分组和处理。
优化分区利用率SendMessageBatchAPI,AWS建议尽可能使用相同消息组ID批处理消息组ID。
优化分区利用率DeleteMessageBatch和ChangeMessageVisibilityBatchAPI,AWS建议使用ReceiveMessage使用的请求MaxNumberOfMessages参数设置为10,并对单个返回的收据句柄进行批处理ReceiveMessage请求.在以下示例中,发送了一批具有各种消息组ID的消息。
该批次分为三组,每组都计入分区的配额。
32 AmazonSimpleQueueService开发人员指南FIFO队列的高吞吐量 33 AmazonSimpleQueueService开发人员指南兼容性 Note AmazonSQS仅保证具有相同消息组ID的消息在批处理请求中分组。
根据内部哈希函数的输出和分区数量,可能会对具有不同消息组ID的消息进行分组。
由于哈希函数或分区数量可能随时更改,因此以后可能不会对某一点进行分组的消息进行分组。
兼容性 客户AmazonSQS缓冲异步客户端目前不支持FIFO队列。
服务如果应用程序使用多个AWS服务,或者混合AWS和外部服务,请务必了解哪些服务功能不支持FIFO队列。
一段时间AWS或者向AmazonSQS发送通知的外部服务可能与FIFO队列不兼容,尽管允许您将FIFO队列设置为目标。
的以下功能AWS当前服务与FIFO队列不兼容:•AmazonS3事件通知•AutoScalingHok•AWSIoT规则操作•AWSLambda死信队列有关其他服务与FIFO队列的兼容性的信息,请参阅服务文档。
AmazonSQS队列和消息标识符 此部分介绍标准队列和FIFO队列的标识符。
这些标识符可帮助您查找并操作特定队列和消息。
主题 •AmazonSQS标准队列和FIFO队列的标识符(p.34)•AmazonSQSFIFO队列的其他标识符(p.35) AmazonSQS标准队列和FIFO队列的标识符 有关以下标识符的更多信息,请参阅AmazonSimpleQueueServiceAPI参考. 队列名称和URL 在创建新的队列时,您必须为AWS账户和区域指定唯一的队列名称。
AmazonSQS会为您创建的每个队列分配一个名为队列URL其中包括队列名称和其他AmazonSQS组件。
每当您要对队列执行操作时,都需要提供其队列URL。
FIFO队列的名称必须以.fifo后缀。
后缀计入80个字符的队列名称配额。
确定队列是否为FIFO(p.26),您可以检查队列名称是否以后缀结尾。
以下是名为的队列URLMyQueue由AWS账号为的用户所拥有123456789012. /123456789012/MyQueue 34 AmazonSimpleQueueService开发人员指南FIFO队列的其他标识符 您可以通过列出队列并解析账号后的字符串,以编程方式检索队列的URL。
有关更多信息,请参阅ListQueues。
消息ID 每条消息都会收到系统分配的消息IDAmazonSQS在SendMessage响应。
此标识符用于识别消息。
(但,要删除消息,您需要消息的接收句柄。
)消息ID的最大长度为100个字符。
接收句柄 每当收到来自队列的消息时,您都会收到该消息的接收句柄。
此句柄与接收消息的操作相关联,与消息本身无关。
要删除消息或更改消息可见性,您必须提供接收句柄(而不是消息ID)。
因此,您必须始终先接收消息,然后才能删除它(您不能将消息放入队列中,然后重新调用它)。
接收句柄的最大长度为1024个字符。
Important 如果多次接收某条消息,则每次接收该消息时,您都会获得不同的接收句柄。
在请求删除该消息时,您必须提供最近收到的接收句柄(否则,可能无法删除该消息)。
以下是接收句柄的示例(跨三条线分解)。
MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+CwLj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QEauMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0= AmazonSQSFIFO队列的其他标识符 有关以下标识符的更多信息,请参阅确切一次处理(p.28)和AmazonSimpleQueueServiceAPI参考. 消息重复数据删除ID 用于消除已发送消息的重复数据的令牌。
如果成功发送具有特定消息重复数据消除ID的消息,则使用相同消息重复数据消除ID发送的任何邮件都将成功接受,但不会在5分钟的重复数据删除间隔内传送。
消息组ID 指定消息属于特定消息组的标签。
属于同一消息组的消息始终按相对于消息组的严格顺序逐个处理(但是,属于不同消息组的消息可能会失序处理)。
序列号 AmazonSQS为每条消息分配的非连续大号码。
消息元数据 您可以使用消息属性将自定义元数据附加到应用程序的AmazonSQS消息。
您可以使用消息系统属性来存储其他AWS服务(如AWSX-Ray)的元数据。
主题 •AmazonSQS消息属性(p.36)•AmazonSQS消息系统属性(p.38) 35 AmazonSimpleQueueService开发人员指南消息属性 AmazonSQS消息属性 AmazonSQS允许您在消息中包括结构化元数据(如时间戳、地理空间数据、签名和标识符)。
消息属性.每条消息最多可以包含10个属性。
消息属性是可选的,并独立于消息正文(不过会随之一起发送)。
使用者可以使用消息属性以特定方式处理消息,而无需先处理消息正文。
有关使用AmazonSQS控制台发送带有属性消息的信息,请参阅发送带有属性的消息(控制台)(p.20). Note 不要混淆消息属性与消息系统属性:尽管您可以使用消息属性将自定义元数据附加到应用程序的AmazonSQS消息,但您可以使用消息系统属性(p.38)存储其他元数据AWS服务,例如AWSX-Ray. 主题•消息属性组件(p.36)•消息属性数据类型(p.36)•计算消息属性的MD5消息摘要(p.37) 消息属性组件 Important 消息属性的所有组件都包括在256KB的消息大小限制中。
Name、Type、Value和消息正文也不应为空或null。
每个消息属性包含以下组件: •名称—消息属性名称可包含以下字符:A-Z、a-z、0-
9、下划线(_)、连字符(-)和期间(.)。
以下限制适用:•最长可为256个字符•不能以AWS.或Amazon.(或任意大小写变化形式)开头•区分大小写•必须在消息的所有属性名中唯一•不能以句点开头或结尾•序列中不能有句点 •类型—消息属性数据类型。
支持的类型包括String、Number和Binary。
您也可以添加有关任意数据类型的自定义信息。
数据类型与消息正文具有相同的限制(有关更多信息,请参阅SendMessage中的AmazonSimpleQueueServiceAPI参考)。
此外,以下限制将适用:•最长可为256个字符•区分大小写 •值—消息属性值。
对于String数据类型,属性值具有与消息正文相同的限制。
消息属性数据类型 消息属性数据类型指示AmazonSQS如何处理对应的消息属性值。
例如,如果类型是Number,AmazonSQS会验证数字值。
AmazonSQS支持逻辑数据类型String、Number,和Binary使用格式的可选自定义数据类型标签.custom-data-type •字符串–String属性可以使用任意有效XML字符存储Unicode文本。
•数字–Number属性可以存储正数或负数数值。
数字最多可精确到38位,并且介于10^-128和10^+126之 间。
36 AmazonSimpleQueueService开发人员指南消息属性 NoteAmazonSQS删除开头和结尾的零。
•二进制—BinaryBinary属性可以存储任何二进制数据,例如压缩数据、加密数据或图像。
•Custom(自定义)—要创建自定义数据类型,请将自定义类型标签附加到任意数据类型。
例如:•Number.byte、Number.short、Number.int和Number.float可帮助区分各种数字类型。
•Binary.gif和Binary.png可帮助区分文件类型。
NoteAmazonSQS不会解释、验证或使用附加数据。
custom-type标签与消息正文具有相同的限制。
计算消息属性的MD5消息摘要 如果使用AWSSDKforJava,可以跳过本节。
这些区域有:MessageMD5ChecksumHandler的SDKforJava发工具包类支持AmazonSQS消息属性的MD5消息摘要。
如果您使用查询API或其中一个AWSAmazonSQS消息属性不支持MD5消息摘要的开发工具包,则必须使用以下指南来执行MD5消息摘要计算。
Note始终在MD5消息摘要计算中包含自定义数据类型后缀。
概览 以下概述了MD5消息摘要计算算法:
1.按名称的升序对所有消息属性进行排序。

2.将每个属性的各个部分(Name、Type和Value)进行编码并存入缓冲区。

3.计算整个缓冲区的消息摘要。
下图演示单个消息属性的MD5消息摘要的编码: 对单个AmazonSQS消息属性编码
1.对名称编码:长度(4字节)和名称的UTF-8字节。
37 AmazonSimpleQueueService开发人员指南消息系统属性
2.对数据类型编码:长度(4字节)和数据类型的UTF-8字节。

3.对值(1个字节)的传输类型(String或Binary)编码。
Note 逻辑数据类型String和Number使用String传输类型。
逻辑数据类型Binary使用Binary传输类型。
a.对于String传输类型,编码为
1。
b.对于Binary传输类型,编码为
2。

4.对属性值编码。
a.对于String传输类型,对属性值编码:长度(4字节)和值的UTF-8字节。
b.对于Binary传输类型,对属性值编码:值的长度(4字节)和原始字节。
AmazonSQS消息系统属性 而您可以使用消息属性(p.36)如需将自定义元数据附加到应用程序的AmazonSQS消息,您可以使用消息系统属性存储其他元数据AWS服务,例如AWSX-Ray.有关更多信息,请参阅。
MessageSystemAttribute的请求参数SendMessage和SendMessageBatchAPI操作,AWSTraceHeader的属性ReceiveMessageAPI操作,以及MessageSystemAttributeValue中的数据类型AmazonSimpleQueueServiceAPI参考. 消息系统属性的结构与消息属性完全一样,除了以下例外: •当前唯一受支持的消息系统属性是AWSTraceHeader。
它的类型必须是String而且值必须为格式正确的AWSX-Ray跟踪标头字符串。
•消息系统属性的大小不会计入消息的总大小。
处理AmazonSQS消息所需的资源 为帮助您估计处理已排队消息所需的资源,AmazonSQS可以确定队列中的已延迟、可见以及不可见的消息的大致数量。
有关可见性的更多信息,请参阅“AmazonSQS可见性超时(p.44)”。
Note 对于标准队列,结果是近似值的,因为AmazonSQS的分布式体系结构。
在大多数情况下,计数应接近队列中的实际消息数。
对于FIFO队列,结果是准确的。
下表列出了用于GetQueueAttributes操作的属性名称: 任务 获取可从队列检索的大致消息数。
获取队列中延迟且无法立即读取的大致消息数。
如果队列被配置为延迟队列,或者使用了延迟参数来发送消息,则会出现这种情况。
获取“处于飞行状态”的大致消息数。
如果消息已发送到客户端,但尚未删除或尚未到达其可见性窗口末尾,则消息被视为处于飞行状态。
属性名称ApproximateNumberOfMessagesApproximateNumberOfMessagesDelayed ApproximateNumberOfMessagesNotVisible 38 AmazonSimpleQueueService开发人员指南列出队列分页 列出队列分页 这些区域有:listQueues和listDeadLetterQueuesAPI方法支持可选的分页控件。
默认情况下,这些API方法在响应消息中返回最多1000个队列。
可以将MaxResults参数可在每个响应中返回的结果较少。
在listQueues或listDeadLetterQueues请求中设置参数MaxResults,以指定要在响应中返回的最大结果数。
如果你没设置MaxResults,响应最多包含1000个结果和NextToken响应中的值为null。
如果你设置MaxResults,则响应将包含的值NextToken如果要显示更多结果。
在对listQueues的下一个请求中将NextToken作为参数,以接收下一页结果。
如果没有要显示更多结果,则NextToken响应中的值为null。
AmazonSQS成本分配标签 要组织并标识您的AmazonSQS队列以进行成本分配,您可以添加元数据元数据。
标签用于标识队列的用途、所有者或环境。
—这在您拥有许多队列时尤其有用。
要使用AmazonSQS控制台配置标签,请参阅thesectioncalled“为队列配置标签”(p.16) 您可以使用成本分配标签组织AWS账单,以反映您自己的成本结构。
要执行此操作,请注册以获取您的AWS账户要包含标签键和值的账单。
有关更多信息,请参阅《AWSBilling用户指南》中的设置月度成本分配报告。
每个标签均包含您定义的一个键-值对。
例如,如果您按如下标签队列,则可轻松标识这些队列:生产和测试队列 QueueMyQueueAMyQueueB 密钥QueueTypeQueueType 值ProductionTesting Note 在使用队列标签时,请遵循以下准则:•我们不建议在队列中添加50个以上的标签。
标签支持UTF-8格式字符。
•标签没有任何语义含义。
AmazonSQS将标签解释为字符串。
•标签区分大小写。
•密钥与现有标签相同的新标签将覆盖现有标签。
•标记操作限制为每个5TPSAWS账户.如果应用程序需要更高的吞吐量,提交请求。
. 有关标签限制的完整列表,请参阅与队列相关的配额(p.94). AmazonSQS短轮询和长轮询 AmazonSQS提供短轮询和长轮询以接收来自队列的消息。
默认情况下,队列使用短轮询。
与短轮询,ReceiveMessage请求仅查询服务器的一个子集(基于加权随机分布),以查找可包含在响应中的消息。
即使查询未找到任何消息,AmazonSQS也会立即发送响应。
39 AmazonSimpleQueueService开发人员指南通过短轮询来使用消息 与长轮询,ReceiveMessage请求查询所有服务器以获取消息。
AmazonSQS在收集至少一条可用消息(最多为可在请求中指定的最大消息数)后发送响应。
只有在轮询等待时间过期时,AmazonSQS才会发送空响应。
以下部分解释短轮询和长轮询的详细信息。
主题 •通过短轮询来使用消息(p.40)•通过长轮询来使用消息(p.40)•长轮询和短轮询之间的区别(p.41) 通过短轮询来使用消息 当通过短轮询从队列中使用消息时,AmazonSQS会对其一部分服务器(基于加权随机分布)进行采样,并且仅从这些服务器返回消息。
因此,特定ReceiveMessage请求可能不会返回您的所有消息。
但是,如果您的队列中的消息少于1,000条,一个后续请求将返回您的消息。
如果您继续从您的队列中使用消息,则AmazonSQS会对其所有服务器进行采样,然后您将收到您的所有消息。
下图显示了系统组件之一提出接收请求后从标准队列返回的消息的短轮询行为。
AmazonSQS对其若干服务器(显示为灰色)进行采样并从这些服务器返回消息
A、C、D和
B。
系统不会为此请求返回消息
E,但将为后续请求返回该消息。
通过长轮询来使用消息 当等待时间ReceiveMessageAPI操作大于
0,长轮询实际上。
轮询等待时间最长为20秒。
长轮询通过消除空响应的数量(在没有消息可用时)来帮助降低您使用AmazonSQS的成本。
ReceiveMessage请求)和假的空响应(消息可用但未包含在响应中)。
有关使用AmazonSQS控制台为新队列或现有队列启用长轮询的信息,请参阅配置队列参数(控制台)(p.12).有关最佳实践,请参阅设置长轮询(p.53)。
长轮询具有以下好处:•在发送响应之前,允许AmazonSQS等到队列中的消息可用为止,从而减少空响应。
除非连接超时,否 则对ReceiveMessage请求的响应将至少包含一条可用的消息,并且最多包含ReceiveMessage操作中指定的最大数量的消息。
在极少数情况下,即使队列仍包含消息,也可能会收到空响应,尤其是如果您为ReceiveMessageWaitTimeSeconds参数。
•通过查询所有(而不是子集)AmazonSQS服务器,从而减少假的空响应。
•在消息可用时立即返回消息。
40 AmazonSimpleQueueService开发人员指南长轮询和短轮询之间的区别 有关如何确认队列为空的信息,请参阅。
确认队列为空(p.22). 长轮询和短轮询之间的区别 如果以下列两种方式之一将WaitTimeSeconds请求的ReceiveMessage参数设置为
0,则会出现短轮询: •ReceiveMessage调用将WaitTimeSeconds设置为
0。
•ReceiveMessage调用不会设置WaitTimeSeconds,但队列属性 ReceiveMessageWaitTimeSeconds将设置为
0。
AmazonSQS死信队列 AmazonSQS支持死信队列(DLQ),哪些其他队列(源队列)可将无法成功处理(使用)的消息作为目标。
死信队列有助于调试您的应用程序或消息传递系统,因为它们可让您隔离未使用的消息以确定其处理失败的原因。
有关使用AmazonSQS控制台创建队列并为其配置死信队列的信息,请参阅。
配置死信队列(控制台)(p.15).调试消费者应用程序或使用者应用程序可用于使用消息后,可以使用死信队列重新驱动功能(p.15)只需单击AmazonSQS控制台上的按钮即可将消息移回源队列。
Important AmazonSQS确实不自动创建死信队列。
您必须先创建队列,然后才能将其用作死信队列。
主题•死信队列的工作方式(p.41)•死信队列有哪些好处?(p.42)•不同的队列类型如何处理消息失败?(p.42)•何时应使用死信队列?(p.42)•将消息移出死信队列(p.43)•排查死信队列的问题(p.43) 死信队列的工作方式 有时会因各种可能的问题(例如,创建者应用程序或使用者应用程序内的错误条件或导致您的应用程序代码出现问题的意外状态更改)而导致无法处理消息。
例如,如果用户使用某特定产品ID下达Web订单,但产品ID已被删除,则Web商店的代码会失败并显示错误,而且包含订单请求的消息将发送到死信队列。
有时,创建器和使用器可能无法解释其用于通信的协议的各个方面,从而导致消息中断或丢失。
此外,使用者的硬件错误可能会中断消息负载。
这些区域有:重新驱动策略指定源队列,死信队列以及AmazonSQS将消息从前者移至后者的条件(如果源队列的使用者无法处理消息指定次数)。
这些区域有:maxReceiveCount是指在将消息移至死信队列之前,使用者尝试从队列接收消息而不将其删除的次数。
设置maxReceiveCount如果值较低,如
1,将导致无法接收消息,从而导致消息移至死信队列。
此类失败包括网络错误和客户端依赖性错误。
为了确保您的系统能够抵御错误,请将maxReceiveCount足够高以允许足够的重试次数。
这些区域有:重新驱动允许策略指定哪些源队列可以访问死信队列。
此策略适用于潜在的死信队列。
您可以选择是允许所有源队列、允许特定的源队列还是拒绝所有源队列。
默认情况下允许所有源队列使用死信队列。
如果您选择允许特定队列(使用byQueue选项),您可以使用源队列Amazon资源名称(ARN)指定最多10个源队列。
如果你指定denyAll中,队列无法用作死信队列。
要指定死信队列,您可以使用控制台或AWSSDKforJava.您必须为将消息发送到死信队列的每个队列执行此操作。
同一类型的多个队列可将一个死信队列作为目标。
有关更多信息,请参阅。
配置死信队列(控制台)(p.15)和RedrivePolicy和RedriveAllowPolicy的属性CreateQueue要么SetQueueAttributesaction. 41 AmazonSimpleQueueService开发人员指南死信队列有哪些好处? Important FIFO队列的死信队列也必须是FIFO队列。
同样,标准队列的死信队列也必须是标准队列。
您必须使用相同的AWS账户以创建死信队列以及向死信队列发送消息的其他队列。
此外,死信队列必须驻留在使用死信队列的其他队列所在的区域中。
例如,如果在美国东部(俄亥俄)区域中创建一个队列,并且要对该队列使用死信队列,则第二个队列也必须位于美国东部(俄亥俄)区域中。
消息的过期时间始终基于其原始入队时间戳。
将消息移至死信队列时,入队列的时间戳将保持不变。
这些区域有:ApproximateAgeOfOldestMessage指标指示消息何时移动到死信队列,不最初发送消息的时间。
例如,假设消息在原始队列中花费1天时间,然后才移动到死信队列。
如果死信队列的保留期为4天,则该消息将在3天后从死信队列中删除,ApproximateAgeOfOldestMessage是3天。
因此,最佳做法是始终将死信队列的保留期限设置为长于原始队列的保留期。
死信队列有哪些好处? 死信队列的主要任务是处理未使用的消息的生命周期。
死信队列可让您留出并隔离无法正确处理的消息以确定其处理失败的原因。
设置死信队列可让您执行以下操作: •为移动到死信队列的任何消息配置警报。
•检查日志以了解可能导致消息移至死信队列的异常。
•分析移动到死信队列的消息的内容以诊断软件或生产者或消费者的硬件问题。
•确定是否为使用者提供了充足的时间来处理消息。
不同的队列类型如何处理消息失败? 标准队列 标准队列(p.26)保留期结束前继续处理消息。
这种连续处理消息最大程度地减小队列由无法处理的消息阻止的几率。
连续消息处理还可以更快地恢复您的队列。
在一个处理数千条消息的系统中,拥有使用器反复无法确认和删除的大量消息可能会增加成本并给硬件带来额外负载。
最好是在几次处理尝试之后将失败的消息移至死信队列,而不是在这些消息到期前一直尝试处理它们。
Note 标准队列允许大量正在传输的消息。
如果大多数消息无法使用且没有发送到死信队列,则处理有效消息的速率将下降。
因此,要保持队列的效率,请确保您的应用程序正确处理消息。
FIFO队列 FIFO队列(p.26)通过按顺序使用消息组中的消息,只进行一次处理。
因此,尽管使用者可继续检索另一个消息组中的有序消息,但在阻止队列的消息得到成功处理之前,第一个消息组将保持不可用状态。
Note FIFO队列允许少量正在传输的消息。
因此,为了防止FIFO队列被消息阻止,请确保您的应用程序正确处理消息处理。
何时应使用死信队列? 请不要对标准队列使用死信队列。
如果您的应用程序不依赖订购,您应始终利用死信队列。
死信队列可帮助您排查不正确的消息传输操作的问题。
42 AmazonSimpleQueueService开发人员指南将消息移出死信队列 Note即使您使用死信队列,也应继续监控您的队列并重试发送因临时原因而失败的消息。
请不要使用死信队列来减少消息量并降低将系统公开给其中的几率。
毒丸消息(可以接收但无法处理的消息)。
如果要无限地重试传输消息,请不要对标准队列使用死信队列。
例如,如果您的程序必须等待相关进程变得活动或可用,请不要使用死信队列。
如果您不想中断消息或操作的准确顺序,请不要对FIFO队列使用死信队列。
例如,请不要对视频编辑套件的编辑决策列表(EDL)中的指令使用死信队列,此情况下,更改编辑的顺序将更改后续编辑的上下文。
将消息移出死信队列 您可以使用重新驱动死信队列以管理未使用消息的生命周期。
在调查死信队列中标准未使用消息的属性和相关元数据之后,您可以将这些消息重新驱动回其源队列。
死信队列重新驱动通过在移动消息时批处理消息来减少API调用计费。
重新驱动任务使用AmazonSQSSendMessageBatch、ReceiveMessage,和DeleteMessageBatch代表用户重新驱动消息的API。
因此,所有重新驱动的消息都被视为带有新消息的新消息messageid、enqueueTime以及保留期。
死信队列重新驱动的定价使用调用的API调用数量和基于AmazonSQS定价. 默认情况下,死信队列重新驱动将消息从死信队列移动到源队列。
但是,您也可以将任何其他标准队列配置为重新驱动目标。
此外,您可以配置重新驱动速度以设置AmazonSQS移动消息的速率。
有关使用AmazonSQS控制台配置死信队列重新驱动的说明,请参阅配置死信队列重驱(控制台)(p.15). NoteAmazonSQS控制台中仅为标准队列支持死信队列重新驱动。
AmazonSQS不支持在从死信队列中重新驱动消息时过滤和修改消息。
死信队列重新驱动任务最多可以运行36小时。
AmazonSQS支持每个账户最多100个活动的重新驱动任务。
排查死信队列的问题 在某些情况下,AmazonSQS死信队列的行为可能并不总是符合预期。
此部分概述了常见问题并说明如何解决这些问题。
43 AmazonSimpleQueueService开发人员指南可见性超时 使用控制台查看消息可能会导致消息移至死信队列 AmazonSQS将根据相应队列的重新驱动策略在控制台中查看消息的计数。
因此,如果在控制台中查看消息(按相应队列的重新驱动策略中指定的次数),则该消息将移至相应队列的死信队列中。
要调整此行为,您可以执行下列操作之一:•针对相应队列的重新驱动策略增大MaximumReceives设置。
•避免在控制台中查看相应队列的消息。
死信队列的NumberOfMessagesSent和NumberOfMessagesReceived不匹配 如果您手动向死信队列发送消息,它将由NumberOfMessagesSent指标捕获。
不过,如果因处理尝试失败而发送消息到死信队列,则此指标不会捕获该消息。
因此,NumberOfMessagesSent和NumberOfMessagesReceived的值可能不同。
有关使用AmazonSQS控制台创建和配置死信队列重新驱动的信息。
请注意,死信队列重新驱动要求您为AmazonSQS设置适当的权限以接收死信队列的消息并将消息发送到目标队列。
如果权限不足,死信队列重新驱动到源队列不会启动消息重新驱动,并且可能会失败任务。
您可以查看消息重新驱动任务的状态以修复问题并重试。
AmazonSQS可见性超时 当使用者接收并处理来自某个队列的消息时,消息将保留在该队列中。
AmazonSQS不会自动删除消息。
因为AmazonSQS是分布式系统,所以无法保证使用者实际收到消息(例如,由于连接问题或由于使用者应用程序问题)。
因此,使用者在接收和处理消息后必须从队列中删除该消息。
在收到消息后,消息将立即保留在队列中。
为防止其他用户再次处理消息,AmazonSQS会设置可见性超时,AmazonSQS阻止其他用户接收并处理消息的一段时间。
消息的默认可见性超时为30秒。
最少为0秒。
最长时间为12个小时。
有关使用控制台配置队列可见性超时的信息,请参阅配置队列参数(控制台)(p.12). Note对于标准队列,可见性超时无法保证不会接收消息两次。
有关更多信息,请参阅至少一次传递(p.26)。
FIFO队列允许生产者或消费者尝试多次重试: 44 AmazonSimpleQueueService开发人员指南传输中的消息 •如果生产者检测到失败SendMessage操作时,它可以使用相同的消息重复数据消除ID,根据需要多次重试发送。
假设生产者在重复数据消除间隔到期之前至少收到一个确认,则多次重试既不影响消息的顺序,也不会引入重复项。
•如果消费者检测到失败ReceiveMessage操作,它可以根据需要使用相同的接收请求尝试ID重试多次。
假设消费者在可见性超时到期之前至少收到一个确认,则多次重试不会影响消息的顺序。
•当您收到带有消息组ID的消息时,除非删除消息或变为可见消息,否则不再返回同一消息组ID的消息。
主题•传输中的消息(p.45)•设置可见性超时(p.45)•更改消息的可见性超时(p.46)•终止消息的可见性超时(p.46) 传输中的消息 AmazonSQS消息有三个基本状态:
1.由制作人发送到队列。

2.消费者从队列中收到。

3.从队列中删除。
一条消息被认为是已存储在生产者将其发送到队列之后,但是消费者尚未从队列中收到(即在状态1和2之间)。
存储的消息数量没有配额。
一条消息被认为是在飞行中在消费者从队列中接收,但尚未从队列中删除(即在状态2和3之间)之后。
对于传输中的消息数量有配额。
Important 适用于机上消息的配额与无限的存储的消息数量。
对于大多数标准队列(取决于队列流量和消息积压),最多可能有120000个传输中的消息(由使用者从队列中接收,但尚未从队列中删除)。
如果您在使用时达到此配额短轮询(p.40),AmazonSQS返回OverLimit错误消息。
如果您使用长轮询(p.40),AmazonSQS不返回错误消息。
为避免达到此配额,您应该在处理消息后将其从队列中删除。
您还可以增加用来处理消息的队列的数量。
要申请提高配额,请提交支持请求。
对于FIFO队列,最多可能有20,000个传输中的消息(使用者从队列中收到但尚未从队列中删除)。
如果您达到此配额,AmazonSQS将不返回任何错误消息。
Important 使用FIFO队列时,DeleteMessage如果在可见性超时窗口之外收到请求,操作将失败。
如果可见性超时为0秒,则必须在发送的同一毫秒内删除消息,否则该消息被视为已放弃。
这可能会导致AmazonSQS在对ReceiveMessage如果您将MaxNumberOfMessages参数大于
1。
有关其他详细信息,AmazonSQSFIFOAPI的工作原理. 设置可见性超时 可见性超时从AmazonSQS返回消息时开始。
在这段时间里,使用者可以处理和删除消息。
但是,如果使用者在删除消息之前失败,并且您的系统没有在可见性超时结束之前对该消息调用DeleteMessage操作,则其他使用者将可以看到该消息并且再次接收该消息。
如果某条消息只能被接收一次,则您的使用者应在可见性超时期间内删除该消息。
45 AmazonSimpleQueueService开发人员指南更改消息的可见性超时 每个AmazonSQS队列都具有30秒的默认可见性超时设置。
您可以为整个队列更改此设置。
通常,您应将可见性超时设置为您的应用程序处理消息并从队列中删除消息所需的最长时间。
此外,在接收消息时,您还可以为返回的消息设置特殊的可见性超时,而无需更改整个队列的超时。
有关更多信息,请参阅及时处理消息(p.52)部分中的最佳实践。
如果您不知道处理消息需要多长时间,请创建心跳对于你的消费者流程:指定初始可见性超时(例如2分钟),然后,只要您的消费者仍在处理消息,就可以每分钟将可见性超时延长2分钟。
Important 最大可见性超时为AmazonSQS收到ReceiveMessage请求.延长可见性超时不会重置12小时的最大值。
此外,您可能无法将单条消息的超时设置为整整12小时(例如43,200秒),因为ReceiveMessage请求启动计时器。
例如,如果您收到消息并立即通过发送ChangeMessageVisibility使用调用VisibilityTimeout等于43,200秒,它可能会失败。
但是,使用值43,195秒将起作用,除非通过以下方式请求消息之间存在显著延迟。
ReceiveMessage并更新可见性超时。
如果您的使用者需要超过12小时,请考虑使用StepFunctions。
更改消息的可见性超时 当您收到来自队列的消息并开始处理该消息时,队列的可见性超时可能不够(例如,您可能需要处理和删除消息)。
可通过使用ChangeMessageVisibility操作指定新的超时值来缩短或延长消息的可见性。
例如,如果队列的默认超时值为60秒,在您接收消息后15秒时,您发送了ChangeMessageVisibility调用并将VisibilityTimeout设为10秒,则这10秒从您进行ChangeMessageVisibility调用时开始计时。
因此,自您最初更改可见性超时后10秒(共25秒)起,任何更改可见性超时或删除此消息的尝试都可能导致错误。
Note 新的超时期限自您调用ChangeMessageVisibility操作起生效。
此外,新的超时期限仅应用于消息的特定接收。
ChangeMessageVisibility不会影响消息的后续接收或后续队列的超时。
终止消息的可见性超时 收到来自某个队列的某条消息时,您可能会发现,您实际上不想处理并删除该消息。
AmazonSQS允许您终止特定消息的可见性超时。
这将使该消息对系统中的其他组件立即可见并且可用于处理。
要在调用ReceiveMessage后终止消息的可见性超时,请调用ChangeMessageVisibility并将VisibilityTimeout设置为0秒。
AmazonSQS延迟队列 延迟队列可让您将针对使用者的新消息传递操作推迟特定的秒数,例如,当您的使用者应用程序需要更多的时间处理消息时。
如果您创建延迟队列,则发送到队列的任何消息在延迟期间对使用者都不可见。
队列的默认(最短)延迟为0秒。
最大值为15分钟。
有关使用控制台配置延迟队列的信息,请参阅配置队列参数(控制台)(p.12). Note 对于标准队列,每队列延迟设置是不能追溯—更改此设置不会影响队列中已有的消息的延迟。
对于FIFO队列,每队列延迟设置是追溯的—更改此设置会影响队列中已有的消息的延迟。
延迟队列类似于可见性超时(p.44),因为这两种功能都使得使用者在特定的时间段内无法获得消息。
二者之间的区别在于:对于延迟队列,消息在首次添加到队列时是隐藏的;而对于可见性超时,消息只有在从队列使用后才是隐藏的。
下图说明了延迟队列和可见性超时之间的关系。
46 AmazonSimpleQueueService开发人员指南临时队列 要设置延迟秒单个消息,而不是在整个队列中使用消息定时器(p.51)允许AmazonSQS使用消息计时器DelaySeconds值而不是延迟队列的DelaySeconds值。
AmazonSQS临时队列 在使用常见消息模式时,临时队列可帮助您节省开发时间和部署成本,例如请求-响应.您可以使用临时队列客户端以创建高吞吐量、经济高效、由应用程序管理的临时队列。
客户端映射多个临时队列—根据需要为特定流程创建的应用程序管理队列—自动到单个AmazonSQS队列上。
当指向每个临时队列的流量较低时,这就使得您的应用程序发出较少的API调用,实现更高的吞吐量。
当临时队列不再使用时,客户端自动清除临时队列,即使部分使用客户端的进程没有完全关闭也是如此。
以下是临时队列的优势:•它们充当特定线程或进程的轻型通信渠道。
•创建和删除临时队列不会产生额外的成本。
•它们与静态(普通)AmazonSQS队列API兼容。
这意味着发送和接收消息的现有代码可以针对虚拟队列 发送和接收消息。
主题•虚拟队列(p.47)•请求-响应消息收发模式(虚拟队列)(p.48)•示例方案:处理登录请求(p.49) •在客户端(p.49)•在服务器端(p.50)•清除队列(p.50) 虚拟队列 虚拟队列是临时队列客户端创建的本地数据结构。
使用虚拟队列让您可以将多个低流量目标合并成单个AmazonSQS队列。
有关最佳实践,请参阅避免在虚拟队列中重复使用相同的消息组ID(p.56)。
Note•创建虚拟队列操作仅为接收消息的使用者创建临时数据结构。
虚拟队列不对AmazonSQS进行 API调用,因此不会产生任何成本。
•TPS配额适用于单个主机队列中的所有虚拟队列。
有关更多信息,请参阅与消息相关的配 额(p.95)。
47 AmazonSimpleQueueService开发人员指南请求-响应消息收发模式(虚拟队列) AmazonSQSVirtualQueuesClient包装程序类增加了对与虚拟队列相关属性的支持。
要创建虚拟队列,您必须使用HostQueueURL属性调用CreateQueueAPI操作。
此属性指定托管虚拟队列的现有队列。
虚拟队列URL采用以下格式。
/123456789012/MyQueue#MyVirtualQueueName 创建者在虚拟队列URL上调用SendMessage或SendMessageBatchAPI操作时,临时队列客户端执行以下操作:
1.提取虚拟队列名称。

2.将虚拟队列名称作为额外的消息属性进行附加。

3.发送消息到主机队列。
当创建者发送消息时,后台线程轮询主机队列,并根据对应的消息属性将收到的消息发送到虚拟队列。
当使用者在虚拟队列URL上调用ReceiveMessageAPI操作时,临时队列客户端在本地阻止调用,直至后台线程将消息发送到虚拟队列中。
(此过程类似于BufferedAsynchronousClient(p.154)中的消息预取操作:单个API操作可以将消息提供到最多10个虚拟队列。
)删除虚拟队列操作可以在不调用AmazonSQS本身的情况下删除任何客户端资AmazonSQSTemporaryQueuesClient类自动将它创建的所有队列转入临时队列中。
它还会自动使用相同的队列属性,按需创建主机队列。
这些队列的名称共用共同的可配置前缀(默认情况下为__RequesterClientQueues__),该前缀将队列标识为临时队列。
这使得客户端充当了简易替代,可优化创建和删除队列的现有代码。
客户端还包括AmazonSQSRequester和AmazonSQSResponder接口,以允许队列之间的双向通信。
请求-响应消息收发模式(虚拟队列) 临时队列的最常见使用案例为请求-响应消息收发模式,此时请求者创建临时队列来接收各个响应消息。
为了避免为每个响应消息创建AmazonSQS队列,临时队列客户端允许您创建和删除多个临时队列而无需进行任何AmazonSQSAPI调用。
有关更多信息,请参阅实施请求-响应系统(p.54)。
下图显示了使用此模式时的常见配置。
48 AmazonSimpleQueueService开发人员指南示例方案:处理登录请求 示例方案:处理登录请求 以下示例场景展示了如何使用AmazonSQSRequester和AmazonSQSResponder接口来处理用户的登录请求。
在客户端 publicclassLoginClient{//SpecifytheAmazonSQSqueuetowhichtosendrequests.privatefinalStringrequestQueueUrl;//UsetheAmazonSQSRequesterinterfacetocreate//atemporaryqueueforeachresponse.privatefinalAmazonSQSRequestersqsRequester=AmazonSQSRequesterClientBuilder.defaultClient();privatefinalLoginClient(StringrequestQueueUrl){this.requestQueueUrl=requestQueueUrl;}//Sendaloginrequest.publicStringlogin(Stringbody)throwsTimeoutException{SendMessageRequestrequest=newSendMessageRequest().withMessageBody(body).withQueueUrl(requestQueueUrl);//Ifnoresponseisreceived,in20seconds,//triggertheTimeoutException.Messagereply=sqsRequester.sendMessageAndGetResponse(request,20,TimeUnit.SECONDS);returnreply.getBody(); 49 AmazonSimpleQueueService开发人员指南清除队列 }} 发送登录请求将执行以下操作:
1.创建一个临时队列。

2.将临时队列的URL作为属性附加到消息。

3.发送消息。

4.从临时队列接收响应。

5.删除临时队列。

6.返回响应。
在服务器端 以下示例假设在构造时创建了一个线程,它为每个消息轮询该队列并调用handleLoginRequest()方法。
此外,假设使用了doLogin()方法。
publicclassLoginServer{ //SpecifytheAmazonSQSqueuetopollforloginrequests.privatefinalStringrequestQueueUrl; //UsetheAmazonSQSResponderinterfacetotakecare//ofsendingresponsestothecorrectresponsedestination.privatefinalAmazonSQSRespondersqsResponder= AmazonSQSResponderClientBuilder.defaultClient(); privatefinalAmazonSQS(StringrequestQueueUrl){this.requestQueueUrl=requestQueueUrl; } //Processloginrequestsfromtheclient.publicvoidhandleLoginRequest(Messagemessage){ //Processtheloginandreturnaserializedresult.Stringresponse=doLogin(message.getBody()); //ExtracttheURLofthetemporaryqueuefromthemessageattribute//andsendtheresponsetothetemporaryqueue.sqsResponder.sendResponseMessage(MessageContent.fromMessage(message), newMessageContent(response));}} 清除队列 为确保AmazonSQS回收虚拟队列使用的任何内存中资源,应用程序不再需要临时队列客户端时,它应调用shutdown()方法。
您还可以使用AmazonSQSRequester接口的shutdown()方法。
临时队列客户端还提供了一种方法来消除孤立的主机队列。
对于在一段时间内(默认情况下为5分钟)接收API调用的每个队列,客户端使用TagQueueAPI操作来标记仍在使用的队列。
Note 在队列上执行的任意API操作将标记为非空闲,包括不返回任何消息的ReceiveMessage操作。
后台线程使用ListQueues和ListTagsAPI操作,以检查具有已配置前缀的所有队列,并删除至少五分钟内没有被标记的所有队列。
这样,如果一个客户端未完全关闭,则其他活动客户端在之后会进行清除。
为了减少重复工作,具有相同前缀的客户端会通过共享的内部工作队列通信,该队列以前缀命名。
50 AmazonSimpleQueueService开发人员指南消息定时器 AmazonSQS消息定时器 消息定时器允许您为添加到队列的消息指定初始不可见时段。
例如,如果您发送带有45秒计时器的消息,消费者在队列中的前45秒内不可见该消息。
消息的默认(最短)延迟为0秒。
最大值为15分钟。
有关使用控制台使用定时器发送消息的信息,请参阅。
将消息发送到队列(控制台)(p.19). NoteFIFO队列不支持单个消息上的计时器。
要在整个队列(而不是各条消息)上设置延迟期间,请使用延迟队列(p.46)。
各条消息的消息定时器设置将覆盖任何消息定时器DelaySecondsAmazonSQS延迟队列中的值。
51 AmazonSimpleQueueService开发人员指南对标准队列和FIFO队列的建议 AmazonSQS的最佳实践 这些最佳实践可帮助您充分利用AmazonSQS。
主题 •针对AmazonSQS标准队列和FIFO队列的建议(p.52)•关于AmazonSQSFIFO队列的其他建议(p.55) 针对AmazonSQS标准队列和FIFO队列的建议 下列最佳实践可帮助您使用AmazonSQS降低成本并高效地处理消息。
主题 •处理AmazonSQS消息(p.52)•降低AmazonSQS成本(p.54)•从AmazonSQS标准队列移动到FIFO队列(p.55) 处理AmazonSQS消息 下列准则可帮助您使用AmazonSQS高效地处理消息。
主题 •及时处理消息(p.52)•处理请求错误(p.53)•设置长轮询(p.53)•捕获有问题的消息(p.53)•设置死信队列保留期(p.54)•避免不一致的消息处理(p.54)•实施请求-响应系统(p.54) 及时处理消息 可见性超时设置取决于您的应用程序需要多长时间来处理和删除消息。
例如,如果您的应用程序处理一条消息需要花费10秒,并且您将可见性超时设置为15分钟,则在上一次处理尝试失败的情况下,您必须等待一个相对较长的时间才能再次尝试处理消息。
或者,如果您的应用程序处理一条消息需要花费10秒,但您将可见性超时仅设置为2秒,则当原始使用者仍在处理消息时,另一个使用者会收到重复消息。
要确保有足够的时间处理消息,请使用下列策略之一:•如果您知道(或者可以合理地估计)处理消息所需的时间,则将消息的可见性超时延长至处理消息所需的最 长时间并删除消息。
有关更多信息,请参阅。
配置可见性超时(p.45).•如果您不知道处理消息需要多长时间,请创建一个心跳对于你的消费者流程:指定初始可见性超时(例如 2分钟),然后,只要您的消费者仍在处理消息,就可以每分钟将可见性超时延长2分钟。
52 AmazonSimpleQueueService开发人员指南使用消息 Important 最大可见性超时为从AmazonSQS收到ReceiveMessage请求.延长可见性超时不会重置12小时的最大值。
此外,您可能无法将单条消息的超时设置为整整12小时(例如43,200秒),因为ReceiveMessage请求启动计时器。
例如,如果您收到消息并立即通过发送一个ChangeMessageVisibility使用调用VisibilityTimeout等于43,200秒,它可能会失败。
但是,使用值43,195秒将起作用,除非通过以下方式请求消息之间存在显著延迟。
ReceiveMessage并更新可见性超时。
如果您的使用者需要超过12小时,请考虑使用StepFunctions。
处理请求错误 要处理请求错误,请使用下列策略之一: •如果您使用AWS开发工具包,您已有自动重试和退避逻辑可供你使用。
有关退避技术的信息,请参阅亚马逊云科技一般参考中的AWS中的错误重试和指数回退。
•如果您未使用AWS重试和回退的开发工具包功能,请允许暂停(例如,200毫秒),然后重试ReceiveMessage未收到来自AmazonSQS的消息、超时或错误消息后的操作。
对于将产生相同结果的ReceiveMessage的后续使用,应允许更长的暂停时间(例如400毫秒)。
设置长轮询 当等待时间ReceiveMessageAPI操作大于
0,长轮询实际上。
轮询等待时间最长为20秒。
长轮询通过消除空响应的数量(如果没有消息可用时)来帮助降低您使用AmazonSQS的成本。
ReceiveMessage请求)和假的空响应(消息可用但未包含在响应中)。
有关更多信息,请参阅AmazonSQS短轮询和长轮询(p.39)。
要获得最佳消息处理,请使用下列策略: •在大多数情况下,您可以将ReceiveMessage等待时间设置为20秒。
如果20秒对您的应用程序来说太长,则可设置较短的ReceiveMessage等待时间(最少1秒)。
如果您未使用AWS用于访问AmazonSQS的开发工具包,或者如果您配置了AWS要缩短开发工具包的等待时间,则可能必须修改AmazonSQS客户端,才能允许时间更长的请求或对长轮询使用较短的等待时间。
•如果您对多个队列实施长轮询,则对每个队列使用一个线程,而不是对所有队列使用单个线程。
如果对每个队列使用一个线程,您的应用程序将能够在各队列中的消息可用时处理这些消息;如果使用单个线程来轮询多个队列,则可能导致应用程序在等待(最长20秒)没有任何可用消息的队列时无法处理其他队列中的可用消息。
Important 要避免HTTP错误,请确保ReceiveMessage请求长于WaitTimeSeconds参数。
有关更多信息,请参阅。
ReceiveMessage. 捕获有问题的消息 要捕获所有无法处理的消息并收集准确的消息CloudWatch指标,配置死信队列(p.41). •在源队列无法将消息处理指定次数后,重新驱动策略会将消息重定向到死信队列。
•使用死信队列将减少消息数并减小向您公开毒丸消息(可接收但无法处理的消息)的几率。
•在队列中包含毒丸消息可能导致ApproximateAgeOfOldestMessage(p.141)CloudWatch指标失 真,因为它会提供不正确的毒丸消息存在时间。
配置死信队列有助于避免在使用此指标时发出错误警报。
53 AmazonSimpleQueueService开发人员指南降低成本 设置死信队列保留期 消息的过期时间始终基于其原始入队时间戳。
将消息移至死信队列时,入队时间戳将不变。
这些区域有:ApproximateAgeOfOldestMessage指标指示消息何时移动到死信队列,不最初发送消息的时间。
例如,假设消息在原始队列中花费1天时间,然后才移动到死信队列。
如果死信队列的保留期为4天,则该消息将在3天后从死信队列中删除,而ApproximateAgeOfOldestMessage是3天。
因此,最佳做法是始终将死信队列的保留期限设置为长于原始队列的保留期。
避免不一致的消息处理 由于AmazonSQS是一个分布式系统,因此即使AmazonSQS将消息标记为已发送,使用者也可能不会收到消息。
ReceiveMessageAPI方法调用。
在这种情况下,AmazonSQS将消息记录为至少已发送一次,即使使使用者从未收到过也是如此。
由于在这些情况下不会再尝试发送消息,因此我们不建议将死信队列(p.41)的最大接收数量设置为
1。
实施请求-响应系统 实施请求-响应和远程程序调用(RPC)系统时,请记住以下最佳实践: •请勿为每个消息创建回复队列。
而是在启动时为每个创建者创建回复队列,使用关联ID消息属性将回复映射到请求。
•不要让生成者共享回复队列。
这可能会导致生成者收到针对另一个生成者的响应消息。
有关使用临时队列客户端实施请求-响应模式的更多信息,请参阅请求-响应消息收发模式(虚拟队列)(p.48)。
降低AmazonSQS成本 以下最佳实践可帮助您降低成本并利用附加的潜在成本降低或几乎瞬时的响应。
批处理消息操作 要降低成本,可批处理您的消息操作: •要发送、接收和删除消息,并通过单一操作更改多条消息的消息可见性超时,请使用AmazonSQS批处理API操作(p.153). •要将客户端缓冲与请求批处理结合起来,请将长轮询与缓冲的异步客户端(p.154)包含在AWSSDKforJava.Note AmazonSQS缓冲异步客户端目前不支持FIFO队列。
使用适当的轮询模式 •长轮询使您能够在AmazonSQS队列中使用消息可用后立即使用消息。
•要降低AmazonSQS的使用成本并减少空队列的空接收次数(对ReceiveMessage操作(不返回消息),启用长轮询。
有关更多信息,请参阅。
AmazonSQS长轮询(p.39).•要提高轮询具有多次接收的多个线程的效率,请减少线程数。
•在大多数情况下,长轮询优于短轮询。
•短轮询会立即返回响应,即使轮询的AmazonSQS队列为空。
•要满足应立即响应ReceiveMessage请求的应用程序的要求,请使用短轮询。
•短轮询的计费与长轮询相同。
54 AmazonSimpleQueueService开发人员指南从标准队列移至FIFO队列 从AmazonSQS标准队列移动到FIFO队列 如果您未设置DelaySeconds参数,则可通过提供每条已发送消息的消息组ID来移动到FIFO队列。
有关更多信息,请参阅从标准队列移至FIFO队列(p.29)。
关于AmazonSQSFIFO队列的其他建议 下列最佳实践可帮助您最佳地使用消息重复数据删除ID和消息组ID。
有关更多信息,请参阅。
SendMessage和SendMessageBatch中的操作AmazonSimpleQueueServiceAPI参考.主题 •使用AmazonSQS消息重复数据删除ID(p.55)•使用AmazonSQS消息组ID(p.56)•使用AmazonSQS接收请求尝试ID(p.57) 使用AmazonSQS消息重复数据删除ID 消息重复数据删除ID是用于对已发送消息进行重复数据删除的令牌。
如果成功发送具有特定消息重复数据消除ID的消息,则使用相同消息重复数据消除ID发送的任何邮件都将成功接受,但不会在5分钟的重复数据删除间隔内传送。
Note 消息重复数据删除适用于整个队列,而不是单个消息组。
AmazonSQS继续跟踪消息重复数据删除ID,即使在接收消息和删除消息后也是如此。
提供消息重复数据删除ID 创建者应为每条消息提供消息重复数据删除ID值,在下列情况下:•AmazonSQS必须将其视为唯一项的包含相同消息正文的已发送消息。
•AmazonSQS必须将其视为唯一项的内容相同、但消息属性不同的已发送消息。
•AmazonSQS必须将其视为重复项的内容不同(例如,包含在消息正文中的重试计数不同)的已发送消 息。
为单一生产者/使用者系统启用重复数据删除 如果您有单一的创建者和单一的使用者并且消息都是唯一的(因为消息正文中包含特定于应用程序的消息ID),请遵循最佳实践:•为队列启用基于内容的重复数据删除(每条消息都具有唯一的正文)。
创建者可忽略消息重复数据删除ID。
•尽管使用者无需为每个请求提供接收请求尝试ID,但最好提供,因为这样可以更快地执行失败-重试序 列。
•您可重试发送或接收请求,因为它们不会干扰FIFO队列中的消息顺序。
针对中断恢复场景进行设计 FIFO队列中的重复数据删除过程具有时效性。
在设计应用程序时,请确保创建者和使用者均可在客户端故障或网络中断的情况下进行恢复。
55 AmazonSimpleQueueService开发人员指南使用消息组ID •创建者必须知道队列的重复数据删除时间间隔。
AmazonSQS的重复数据消除间隔为5分钟。
在重复数据删除时间间隔过期后重试SendMessage请求可能会将重复的消息引入队列中。
例如,车辆中的移动设备将发送其顺序很重要的消息。
如果车辆在接收确认前一段时间失去手机网络连接,则在重新获得手机网络连接之前重试请求可能产生重复项。
•使用者必须具有可见性超时,以便将在可见性超时过期之前无法处理消息的风险降至最低。
您可通过调用ChangeMessageVisibility操作延长处理消息时的可见性超时。
但是,如果可见性超时过期,其他使用者可立即开始处理消息,从而导致多次处理消息。
要避免这种情况,请配置死信队列(p.41)。
处理可见性超时 要获得最佳性能,请将可见性超时(p.44)设置为大于AWS开发工具包读取超时。
这适用于使用ReceiveMessage使用API操作短轮询(p.40)要么长轮询(p.39). 使用AmazonSQS消息组ID 消息组ID是指定消息属于特定消息组的标记。
属于相同消息组的消息始终按相对于消息组的严格顺序逐个处理(但是,属于不同消息组的消息可能无序处理)。
交错多个有序消息组 要交错一个FIFO队列中的多个有序消息组,请使用消息组ID值(例如,多个用户的会话数据)。
在此情况下,多个使用者可处理此队列,但每个用户的会话数据是按FIFO的方式处理的。
Note 如果属于某个特殊消息组ID的消息不可见,则其他使用者可处理具有相同消息组ID的消息。
避免在多生产者/使用者系统中处理重复项 在吞吐量和延迟比顺序更重要的情况下,若要在具有多个创建者和使用者的系统中避免处理重复消息,创建者应为每条消息生成一个唯一的消息组ID。
Note 在此情况下,将消除重复项。
但是,无法保证消息的顺序。
存在多个创建者和使用者的任何情况都会增加无意中传递重复消息的风险(如果工作线程在可见性超时内未处理消息,并且消息变得对其他工作线程可用)。
避免具有相同消息组ID的消息大量积压 对于FIFO队列,最多可能有20,000个传输中的消息(消费者从队列中接收,但尚未从队列中删除)。
如果您达到此配额,AmazonSQS不返回任何错误消息。
FIFO队列查看前20k条消息以确定可用的消息组。
这意味着,如果您在单个消息组中有积压消息,则在您成功处理完这些积压消息前,您不能使用其他消息组的消息在之后发送到队列的消息。
Note 具有相同消息组ID的消息的积压可能是由于使用者无法成功处理一条消息造成的。
消息处理问题可能是由于消息内容问题或使用者技术问题造成的。
要移走消息以免反复处理该消息,并取消阻止对具有相同消息组ID的其他消息的处理,请考虑设置死信队列(p.41)策略。
避免在虚拟队列中重复使用相同的消息组ID 要防止发送到不同消息组ID的消息虚拟队列(p.47)要使用相同的主机队列互相阻塞,请避免在虚拟队列中重复使用相同的消息组ID。
56 AmazonSimpleQueueService开发人员指南使用接收请求尝试ID 使用AmazonSQS接收请求尝试ID 接收请求尝试ID是用于重复数据删除的令牌。
ReceiveMessage调用。
在导致您的软件开发工具包和AmazonSQS之间产生连接问题的长时间网络中断期间,最佳实践是提供接收请求尝试ID,并在软件开发工具包操作失败时使用相同的接收请求尝试ID进行重试。
57 AmazonSimpleQueueService开发人员指南使用服务器端加密 AmazonSQSJavaSDK示例 您可以使用AWSSDKforJava构建Java应用程序与AmazonSimpleQueueService(AmazonSQS)和其他AWS服务。
要安装并设置SDK,请参阅入门中的AWSSDKforJava2.x开发人员指南. 有关基本AmazonSQS队列操作(例如如何创建队列或发送消息)的示例,请参阅使用AmazonSQS消息队列中的AWSSDKforJava2.x开发人员指南. 本主题中的示例演示了其他AmazonSQS功能,例如服务器端加密(SSE)、成本分配标签和消息属性。
主题•使用服务器端加密(SSE)(p.58)•为队列配置标签(p.59)•发送消息属性(p.61)•使用AmazonS3管理大型AmazonSQS消息(p.62) 使用服务器端加密(SSE) 您可以使用AWSSDKforJava将服务器端加密(SSE)添加到AmazonSQS队列。
每个队列都使用AWSKeyManagementService(AWSKMS)KMS密钥用于生成数据加密密钥。
此示例使用AWSAmazonSQS的托管KMS密钥。
有关使用SSE和KMS密钥角色的更多信息,请参阅静态加密(p.100). 将SSE添加到现有队列 要为现有队列启用服务器端加密,请使用SetQueueAttributes方法来设置KmsMasterKeyId属性。
以下代码示例设置AWSKMSkey作为AWSAmazonSQS的托管KMS密钥。
此示例还将设置为AWSKMSkey重用期(p.101)到140秒。
运行示例代码之前,请确保您已设置您的AWS凭证。
有关更多信息,请参阅。
设置AWS发展凭证和区域中的AWSSDKforJava2.x开发人员指南. //CreateanSqsClientforthespecifiedRegion.SqsClientsqsClient=SqsClient.builder().region(Region.US_WEST_1).build(); //GettheURLofyourqueue.StringmyQueueName="myqueue";GetQueueUrlResponsegetQueueUrlResponse= sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(myQueueName).build());StringqueueUrl=getQueueUrlResponse.queueUrl(); //Createahashmapfortheattributes.Addthekeyaliasandreuseperiodtothehashmap.HashMapattributes=newHashMap();finalStringkmsMasterKeyAlias="alias/aws/sqs";//thealiasoftheAWSmanagedKMSkey forAmazonSQS.attributes.put(QueueAttributeName.KMS_MASTER_KEY_ID,kmsMasterKeyAlias);attributes.put(QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS,"140"); //CreatetheSetQueueAttributesRequest.SetQueueAttributesRequestset_attrs_request=SetQueueAttributesRequest.builder() .queueUrl(queueUrl).attributes(attributes).build(); 58 AmazonSimpleQueueService开发人员指南为队列禁用SSE sqsClient.setQueueAttributes(set_attrs_request); 为队列禁用SSE 要为现有队列禁用服务器端加密,请将KmsMasterKeyId使用属性为空字符串SetQueueAttributes方法。
Important null对于KmsMasterKeyId是无效值。
使用SSE创建队列 要在创建队列时启用SSE,请添加KmsMasterKeyId属性到CreateQueueAPI方法。
以下示例创建启用SSE的新队列。
队列使用AWSAmazonSQS的托管KMS密钥。
此示例还将设置为AWSKMSkey重用期(p.101)到160秒。
运行示例代码之前,请确保您已设置您的AWS凭证。
有关更多信息,请参阅。
设置AWS发展凭证和区域中的AWSSDKforJava2.x开发人员指南. //CreateanSqsClientforthespecifiedRegion.SqsClientsqsClient=SqsClient.builder().region(Region.US_WEST_1).build(); //Createahashmapfortheattributes.Addthekeyaliasandreuseperiodtothehashmap.HashMapattributes=newHashMap();finalStringkmsMasterKeyAlias="alias/aws/sqs";//thealiasoftheAWSmanagedKMSkey forAmazonSQS.attributes.put(QueueAttributeName.KMS_MASTER_KEY_ID,kmsMasterKeyAlias);attributes.put(QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS,"140"); //AddtheattributestotheCreateQueueRequest.CreateQueueRequestcreateQueueRequest= CreateQueueRequest.builder().queueName(queueName).attributes(attributes).build(); sqsClient.createQueue(createQueueRequest); 检索SSE属性 有关检索队列属性的信息,请参阅示例中的亚马逊简单队列服务API参考. 要检索特定队列的KMS密钥ID或数据密钥重用期限,请运行GetQueueAttributes方法然后检索KmsMasterKeyId和KmsDataKeyReusePeriodSeconds价值。
为队列配置标签 使用成本分配标签来帮助组织和标识您的AmazonSQS队列。
以下示例演示如何使用配置标签AWSSDKforJava.有关更多信息,请参阅AmazonSQS成本分配标签(p.39)。
运行示例代码之前,请确保您已设置AWS凭证。
有关更多信息,请参阅。
设置AWS发展凭证和区域中的AWSSDKforJava2.x开发人员指南. 59 AmazonSimpleQueueService开发人员指南列出标签 列出标签 要列出队列的标签,请使用ListQueueTags方法。
//CreateanSqsClientforthespecifiedregion.SqsClientsqsClient=SqsClient.builder().region(Region.US_WEST_1).build(); //GetthequeueURL.StringqueueName="MyStandardQ1";GetQueueUrlResponsegetQueueUrlResponse= sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());StringqueueUrl=getQueueUrlResponse.queueUrl(); //CreatetheListQueueTagsRequest.finalListQueueTagsRequestlistQueueTagsRequest= ListQueueTagsRequest.builder().queueUrl(queueUrl).build(); //Retrievethelistofqueuetagsandprintthem.finalListQueueTagsResponselistQueueTagsResponse= sqsClient.listQueueTags(listQueueTagsRequest);System.out.println(String.format("ListQueueTags:\tTagsforqueue%sare%s.\n", queueName,listQueueTagsResponse.tags())); 添加或更新标签 要添加或更新队列的标签值,请使用TagQueue方法。
//CreateanSqsClientforthespecifiedRegion.SqsClientsqsClient=SqsClient.builder().region(Region.US_WEST_1).build(); //GetthequeueURL.StringqueueName="MyStandardQ1";GetQueueUrlResponsegetQueueUrlResponse= sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());StringqueueUrl=getQueueUrlResponse.queueUrl(); //Buildahashmapofthetags.finalHashMapaddedTags=newHashMap<>(); addedTags.put("Team","Development");addedTags.put("Priority","Beta");addedTags.put("ountingID","456def"); //CreatetheTagQueueRequestandaddthemtothequeue.finalTagQueueRequesttagQueueRequest=TagQueueRequest.builder() .queueUrl(queueUrl).tags(addedTags).build();sqsClient.tagQueue(tagQueueRequest); 删除标签 要从队列中删除一个或多个标签,请使用UntagQueue方法。
下面的示例删除ountingID标签。
//CreatetheUntagQueueRequest.finalUntagQueueRequestuntagQueueRequest=UntagQueueRequest.builder() 60 AmazonSimpleQueueService开发人员指南发送消息属性 .queueUrl(queueUrl).tagKeys("ountingID").build(); //Removethetagfromthisqueue.sqsClient.untagQueue(untagQueueRequest); 发送消息属性 使用消息可将结构化元数据(如时间戳、地理空间数据、签名和标识符)与消息包括在消息中使消息属性.

标签: #怎么看 #换行 #邮箱 #cdr #平局 #雷暴 #csgo #枪法