本文主要是介绍aws SQS可视化超时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当消费者从队列中接收并处理一个消息时,该消息会留在队列中。Amazon SQS不会自动删除该消息。因为Amazon SQS是一个分布式系统,不能保证消费者真正收到消息(例如,由于连接问题,或由于消费者应用程序中的问题)。因此,消费者在接收和处理消息后必须从队列中删除该消息。
在收到一个消息后,它立即留在队列中。为了防止其他消费者再次处理该消息,Amazon SQS设置了一个可见性超时,即Amazon SQS防止其他消费者接收和处理该消息的时间段。一个消息的默认可见性超时是30秒。最小是0秒。最大的是12小时。有关使用控制台为队列配置可见性超时的信息。
正在飞行中的信息
一个Amazon SQS消息有三种基本状态。
1.由生产者发送至队列。
2.由消费者从队列中接收。
3.从队列中删除。
当生产者将消息发送到队列中,但消费者还没有从队列中接收到消息时(即状态1和状态2之间),该消息被认为是被存储的。对存储的消息的数量没有配额。当消费者从队列中收到一条消息,但尚未从队列中删除时(即在状态2和3之间),该消息被认为是在飞行。对飞行中的消息的数量是有配额的。
对于大多数标准队列(取决于队列流量和消息积压),最多可以有大约120,000条飞行中的消息(消费者从队列中收到,但尚未从队列中删除)。如果您在使用短轮询时达到这个配额,Amazon SQS会返回OverLimit错误信息。如果您使用长轮询,Amazon SQS不会返回错误信息。为了避免达到配额,你应该在处理完信息后从队列中删除这些信息。您也可以增加您用来处理消息的队列的数量。要请求增加配额,请提交一个支持请求。
对于先进先出的队列,最多可以有20,000条机内消息(消费者从队列中收到,但尚未从队列中删除)。如果你达到这个配额,Amazon SQS不会返回错误信息。
设置可见性超时
可见性超时从Amazon SQS返回一个消息时开始。在这段时间内,消费者会处理并删除该消息。但是,如果消费者在删除消息之前失败了,并且您的系统在可见性超时之前没有为该消息调用DeleteMessage动作,那么该消息对其他消费者来说就变得可见了,并且该消息会被再次接收。如果一个消息必须只被接收一次,你的消费者应该在可见性超时的时间内删除它。
每个Amazon SQS队列的默认可见性超时设置为30秒。你可以为整个队列改变这个设置。通常情况下,你应该将可见性超时设置为你的应用程序处理和删除队列中的消息所需的最大时间。当接收消息时,你也可以为返回的消息设置一个特殊的可见性超时,而不改变整个队列的超时。欲了解更多信息,请参见及时处理消息一节中的最佳做法。
如果你不知道处理一个消息需要多长时间,为你的消费者进程创建一个心跳。指定初始可见性超时(例如,2分钟),然后–只要你的消费者仍然在处理消息–保持每分钟延长2分钟的可见性超时。
改变信息的可见度超时
当你从队列中收到一条消息并开始处理它时,队列的可见性超时可能不够(例如,你可能需要处理并删除一条消息)。你可以通过使用ChangeMessageVisibility动作指定一个新的超时值来缩短或延长消息的可见性。
例如,如果一个队列的默认超时是60秒,从你收到消息到现在已经过了15秒,而你发送的ChangeMessageVisibility调用的VisibilityTimeout设置为10秒,那么这10秒就从你发出ChangeMessageVisibility调用的时候开始计算。因此,任何试图改变可见性超时或在你最初改变可见性超时(总共25秒)10秒后删除该消息的尝试都可能导致错误。
终止一个消息的可见性超时
当你从队列中收到一个消息时,你可能会发现你实际上并不想处理和删除这个消息。Amazon SQS允许你终止特定消息的可见性超时。这使得该消息对系统中的其他组件立即可见,并可用于处理。
要在调用ReceiveMessage后终止消息的可见性超时,请在VisibilityTimeout设置为0秒时调用ChangeMessageVisibility。
这篇关于aws SQS可视化超时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!