2014-04-03 71 views
0

Iam將郵件發送到隊列並在rails應用程序中使用亞馬遜sqs隊列系統。但由於隊列遵循FIFO流程,因此它將以相同的方式獲取下一個項目。假設如果我有一個隊列中的100個項目,我如何從隊列中檢索第35個項目並處理它。據我所知,amazon sqs沒有提供這樣的方法。那麼是否有任何其他方法/解決方法可以實現此功能。如何檢索亞馬遜sqs和ruby隊列中的第n個項目

回答

1

沒有辦法做到這一點; SQS不保證隊列中物品的順序由於其地理上的冗餘性質;它甚至不能保證FIFO。如果您絕對必須按順序處理事情,並且需要在隊列中「向前看」的能力,SQS可能不是您的最佳選擇。也許像DynamoDB這樣的定製隊列可能會更好。

0

SQS旨在保證至少一次交付並且不考慮消息的順序。所以對於你是否可以這樣做的問題的簡單回答是否定的。

一個解決將取決於你的用例:

  1. 不同工藝處理隊列中的消息,使中拆分工作,確保他們不都處理相同的項目 - 不同的隊列是一種方法,或者在每個消息前加上一個標識符來表示哪個進程應該在其上工作。例如,如果我有4個守護進程正在運行,我可以在隊列中爲每個消息加上應該在其上運行的進程的ID - 1,2,3或4。每個進程只會處理與其對應的編號的消息ID。

  2. 到達順序至關重要 - 在這種情況下,最好不要使用SQS,因爲它不能用於這種方式。 CloudAMQP是基於雲的服務,基於RabbitMQ,這是一個真正的FIFO隊列,並且比SQS更適合這種情況。