簡體   English   中英

亞馬遜簡單隊列服務(SQS)

[英]Amazon Simple Queue Service (SQS)

我在SQS中創建了一個隊列,添加了兩條消息(序列化的PHP數組: array('filename' => 0, ...)array('filename' => 1, ...) )。 我從他們的git repo使用最新版本的amazon SDK for PHP。

問題是當我使用帶有以下選項的receive_message函數時:

MaxNumberOfMessages = 10
VisibilityTimeout = 0 // other values doesn't change much

我只收到第一條消息,重復10次:

<ReceiveMessageResponse>
−
<ReceiveMessageResult>
−
<Message>
<MessageId>82523332-75e0-444d-ae8f-55ccd5580beb</MessageId>
−
<ReceiptHandle>
v5iiyMGi3b6RunVNVvjOQOV+ZDqRV7sNLzj5pUAEj1brIAkucpYiGaM8UIdOEis9Kouh4s+cAkSAd7MhbJKPGM6SdKYE993x2Lf/DwEbhkfmzRxOevzUsyJCrrVdTSTSx0cNUqqV6Cgr/Asi72t/UOhbdXhTp3kaCaZfd2weymg=
</ReceiptHandle>
<MD5OfBody>ced185420292fbd06b32ea6e35da3d21</MD5OfBody>
−
<Body>
a:3:{s:8:"priority";i:2;s:8:"filename";i:0;s:11:"task_ticket";s:0:"";}
</Body>
</Message>
−
<Message>
<MessageId>82523332-75e0-444d-ae8f-55ccd5580beb</MessageId>
−
<ReceiptHandle>
v5iiyMGi3b6RunVNVvjOQOV+ZDqRV7sNLzj5pUAEj1brIAkucpYiGaM8UIdOEis9Kouh4s+cAkSAd7MhbJKPGM6SdKYE993x2Lf/DwEbhkfmzRxOevzUsyJCrrVdTSTSx0cNUqqV6Cgr/Asi72t/UOhbdXhTp3kaCaZfd2weymg=
</ReceiptHandle>
<MD5OfBody>ced185420292fbd06b32ea6e35da3d21</MD5OfBody>
−
<Body>
a:3:{s:8:"priority";i:2;s:8:"filename";i:0;s:11:"task_ticket";s:0:"";}
</Body>
</Message>
    ...and so on, always with "filename";i:0

我100%表示隊列中只有2條消息(我刪除了它並重新創建以確定)然而我只獲得了第一條消息,多次填充。 這種情況會不時發生變化,有時我會在列表中混合第二個。 如果我將VisibilityTimeout保留為默認值3(或其他非零值),則第一個消失一段時間(如預期的那樣),然后我重復多次重復第二個。

get_queue_size返回2,這是真的。

我也嘗試過Amazon Scratchpad並且只是使用相同的結果進行API調用。 那么,SQS是破碎還是我做錯了什么?

我相信這是預期的行為,因為您已設置VisibilityTimeout = 0 通常,您可以將超時值設置為處理消息的預期持續時間。 在可見性超時到期之前 ,您必須在讀取消息上調用delete ,否則消息將自動重新排隊。

在更復雜的系統中,如果初始超時不夠長,則可以使用單獨的線程來延長單個消息的超時時間。

因為聽起來你剛剛開始,所以編寫消息處理代碼以便多次讀取同一消息是很重要的。 您的郵件不僅可以自動重新排隊,而且SQS有時會返回重復的郵件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM