2010-11-14 28 views

回答

11

不幸的是,SQS缺乏我們經常在隊列中期待的一些語義。沒有通知或任何形式的阻止「打電話」。

亞馬遜的相關SNS /簡單通知服務可能對您有所幫助。將工作添加到隊列後,您可以向訂閱的工作人員發送通知。

參見:

http://aws.amazon.com/sns/

Best practices for using Amazon SQS - Polling the queue

+3

SQS現在開始提供長輪詢。因此它將您的呼叫減少到SQS – ankitjaininfo 2013-03-06 10:05:17

6

進一步指出與SQS一個問題 - 你必須輪詢新的通知,並沒有沒有保證在任何特定的民意調查你將接收隊列中存在的事件(這是由於其架構的冗餘性)。這意味着你需要考慮你的投票沒有返回存在的信息(這對我來說意味着我需要提高投票率)。總而言之,我發現SQS有太多限制(正如我在其他一些AWS工具(如SimpleDB)中發現的)。但這只是我注入的意見。

+0

您是否有任何提及接收不在隊列中的事件的AWS文檔的參考? – 2012-07-15 16:19:44

+0

問題是輪詢一個事件,被告知這裏沒有消息,但實際上有一個。並不是說你得到的消息不在隊列中。但是,在您的可見性超時之後,其他輪詢人員將看到您正在處理的消息 - 因此如果您在可見性超時時間內未處理消息,消息可能會被處理兩次。 – 2012-08-22 18:20:09

+2

雖然這不是SQS的問題,但這是一個應用程序問題。如果它長時間運行,則應在此過程中延長可見性超時。 – 2013-09-02 10:16:10

8

這是(現在)可以在SQS隊列上進行長輪詢。

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryReceiveMessage.html

長輪詢支持(整數從1到20) - 持續時間(以秒爲單位)的ReceiveMessage動作呼叫將等待,直到消息是在隊列中的響應於包括,相對於返回如果消息尚不可用,則爲空響應。

如果您未在請求中指定WaitTimeSeconds,則使用隊列屬性ReceiveMessageWaitTimeSeconds來確定等待的時間。

類型:從0到20(秒)整數

默認:隊列的ReceiveMessageWaitTimeSeconds。

7

實際,如果你不要求低延遲,你可以試試這個:

你的隊列創建CloudWatch的警報,如收到> 0 作爲行動的消息可見或消息,您將消息發送到一個sns主題,然後可以通過http/s端點將消息發送給您的工作人員。

通常這種方法用於自動調節。