2012-02-18 78 views
2

現在:使用Amazon SQS和SNS設計推送隊列,如何?

  • 應用1號嵌件消息SQS
  • 一個.NET工作者角色輪詢隊列,如果發現將其發送到App#2的方法,等待應用程序#2到結束,重新開始輪詢的隊列
  • 應用#2的過程,是一項長期而繁重的任務消息

爲app#2可能需要相當長的時間處理這些消息,我無法預測有多少郵件同時發送從應用程序#1,隊列系統保證我的應用程序#2沒有耗盡資源,系統可以很容易地擴展。但是我想解決一個問題:我不想讓一臺機器運行worker角色(現在在Azure上)來輪詢一個隊列(所有東西都託管在別處,而worker角色不是一個選項)。此外,由於民意測驗之間的停頓,民意測驗不會像推動那樣敏感。

從輪詢切換到推動聽起來是正確的道路,但我需要我保證即使1k消息從應用程序#1在一秒內發送,應用程序#2處理它們一個接一個,並沒有命中1k次/秒。

我正在計劃一個應用#1發佈到SNS主題的設計,其訂戶是SQS和App#2。應用程序2檢查SQS隊列,如果它是空的,則退出,如果不是逐個處理消息,則退出。但是,我該如何編寫App#2(現在是.Net網絡/ Web服務),以便如果它已經在處理消息並從SNS接收到通知,它什麼也不做,並退出(如果不是多次處理將會運行)。

任何建議如何設計?我讀this blog post,但我不知道如何避免處理應用程序同時處理多個消息。

回答

2

如果您認爲SNS角色是縮短輪詢「睡眠間隔」的一種方法,那麼您根本不會更改任何查詢功能,應用程序2仍然會按照您的意願處理郵件,但如果它「睡覺「的通知將喚醒它並立即開始投票。

0

您可以通過使用傳遞策略來了解所有這些情況,這些允許您爲端點指定速率限制和重試規則。