2012-07-04 160 views
1

我有以下情形:亞馬遜SQS消息隊列

  • 用於需要進行處理,發送包含工作說明一個消息給一個Amazon SQS消息隊列中的作業
  • 我有具有不同的過程做的工作

需要滿足以下條件:

  1. 如果一個進程失敗要完成一項工作(可能是因爲它在崩潰時運行的服務器),則該作業必須再次可用於其他進程。
  2. 當一個工作正在進行時,具有相同描述的其他工作必須等到第一個工作完成或達到其超時。
  3. 根據消息隊列的長度,系統應該很容易擴展。

爲了確保(1),我的第一個想法是使用Amazon SQS隊列提供的消息鎖定功能,但是如何確保(2)呢?將流程分配給工作描述將是一種選擇,但(3)會更困難。

+1

當你說「其他有相同描述的工作」時,你是什麼意思?我們可能需要更多的細節來幫助。例如,如果我們正在進行圖像大小調整,那麼將系統限制爲一次只能執行一次調整大小操作是沒有意義的。 – Jeff

+0

我認爲這個問題會更清晰一些,但這裏有一些細節:它是關於時間序列(一組歷史數據)的計算模式。具有「相同描述」的作業意味着他們必須計算相同時間序列的模式。每當時間序列的歷史數據更新時,通過向隊列發送相應的消息來觸發模式重新計算。 –

回答

1

設置一個較長的「VisibilityTimeout」值。確保此值比完成作業所需的時間更長。

如果接收此作業的計算機無法完成(或無法及時完成),該消息將再次可供新計算機處理。

這個地址#1和#2。

對於#3,我相信您可以根據SQS隊列的大小設置自動縮放觸發器,因此如果您有更多消息,AWS會自動啓動新實例來處理它們。