使用AWS API创建SQS并在创建后立即发送消息时,SQS中是否存在任何延迟

时间:2019-01-25 07:58:51

标签: amazon-sqs

我想在需要发送消息时使用代码创建SQS,并在使用完所有消息后将其删除。 我只是想知道在使用Java代码创建SQS和向其发送消息之间是否需要一些延迟。 谢谢。 维伦德拉·阿加瓦尔(Virendra Agarwal)

1 个答案:

答案 0 :(得分:0)

您将不得不尝试并观察。 SQS是一个分布式系统,因此尽管我没有为此找到直接的文档参考,但是队列可能无法立即使用。

请注意以下几点:

  

如果删除队列,则必须等待至少60秒钟才能创建具有相同名称的队列。

     

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html

这意味着您的姓名将始终需要不同,但这也意味着有关SQS内部的某些信息–删除队列不是一个瞬时过程。同样的可能在创建时也适用,尽管不一定如此。

此外,无法绝对确定地知道队列确实是空的。长时间不返回任何消息的民意测验强烈表明没有消息,只要飞行中也没有消息(已消耗但未删除),如果消费者重置其可见性或处理不当,则会返回可见性。异常,并且不会在可见性超时到期之前明确地重置其可见性。

但是,GetQueueAttributes没有提供确保队列真正为空的故障保护方法,因为许多计数器属性是消息的 approximate (可见,航班等)。同样,这与SQS的分布式体系结构有关。某些罕见的内部故障可能会导致邮件在内部滞留,直到稍后出现。这的重要性取决于消息的重要性和队列的生命周期,并且对我而言,当队列没有无限期的生存期(即当计划用于队列时)时,出现任何此类问题的风险似乎都增加了队列为“空”时将其删除)。这并不是说SQS不可靠,只是说明所有系统最终都会表现出意外的行为,无论这种情况多么罕见或不太可能。