[英]fetch sqs message visibility_timeout in aws using ruby
在sqs中,有什么方法可以獲得消息的visibility_timeout嗎? 我計划在每次過期時將visibility_timeout加倍。 如果SQS沒有這樣的API可以獲取消息的visibility_timeout,我將需要維護一個單獨的映射。
以下是獲取SQS隊列的可見性時間的語法。 GetQueueAttributes
將為您提供可見性超時的價值。
http://sqs.us-east-1.amazonaws.com/123456789012/testQueue/
?Action=GetQueueAttributes
&AttributeName.1=All
&Version=2012-11-05
&Expires=2013-10-18T22%3A52%3A43PST
&AUTHPARAMS
上述請求的響應如下。
<GetQueueAttributesResponse>
<GetQueueAttributesResult>
<Attribute>
<Name>ReceiveMessageWaitTimeSeconds</Name>
<Value>2</Value>
</Attribute>
<Attribute>
<Name>VisibilityTimeout</Name>
<Value>30</Value>
</Attribute>
<Attribute>
<Name>ApproximateNumberOfMessages</Name>
<Value>0</Value>
</Attribute>
<Attribute>
<Name>ApproximateNumberOfMessagesNotVisible</Name>
<Value>0</Value>
</Attribute>
<Attribute>
<Name>CreatedTimestamp</Name>
<Value>1286771522</Value>
</Attribute>
<Attribute>
<Name>LastModifiedTimestamp</Name>
<Value>1286771522</Value>
</Attribute>
<Attribute>
<Name>QueueArn</Name>
<Value>arn:aws:sqs:us-east-1:123456789012:qfoo</Value>
</Attribute>
<Attribute>
<Name>MaximumMessageSize</Name>
<Value>8192</Value>
</Attribute>
<Attribute>
<Name>MessageRetentionPeriod</Name>
<Value>345600</Value>
</Attribute>
</GetQueueAttributesResult>
<ResponseMetadata>
<RequestId>1ea71be5-b5a2-4f9d-b85a-945d8d08cd0b</RequestId>
</ResponseMetadata>
</GetQueueAttributesResponse>
確保您了解開發人員指南中的“ 可見性超時 ”。
當您收到消息時,可見性計時器將啟動。 沒有辦法在收到的消息上查詢它 - 你可以從收到的時間中通過減去隊列的默認值來計算它,從你坐在消息上的時間減去......或者減去自你以來的時間最后設置它的可見性超時,從你設置它的時間。
加倍超時可能不是最好的計划,因為它有一個最大值,你可能會在幾次加倍后無意中擊中,並且在許多或大多數應用程序中,增加可見性超時應該是不必要的。 這可能表明您正在考慮在其預期設計之外使用S3。
此外,單個隊列限制為120,000個正在進行的消息,其中包括您已收到但未刪除的任何消息 - 包括其可見性超時(無論是默認還是擴展)的所有消息都未過期。
並且,更改消息的可見性超時構成對SQS API的可計費請求。
所有SQS API調用都算作請求
或許,更好,只需將其默認為合理的值,並在合理的時間內更新,如果需要更新。 處理並刪除消息后,可見性超時變得毫無意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.