2017-02-04 116 views
1

消費者正在隊列中偵聽(FIFO或標準隊列),生產者在隊列上產生消息。Amazon SQS如何在這種情況下工作?

  1. Amazon SQS隊列從消費者獲得確認後是否會自動從隊列中刪除消息?有沒有一種方式/配置隊列保持消息,而不是刪除它,並確保它不會再次交付。

  2. 生產者在隊列上產生消息。由於網絡問題,消費者變爲離線。過了一段時間他/她回到網上。當他上網時,隊列會將消息 傳遞給消費者嗎?由於隊列沒有收到消費者的ACK,我認爲是。

回答

1

我相信你是從rabbitmq的角度問的。有一些差異。沒有ack平方。消息不會自動刪除,即使消費者接受消息,消息也會保持在隊列中。消費者在完成處理之後需要明確地刪除消息。

平方不打擾消費者的在線離線狀態。消費者定期調查新項目的平方。如果有消息可用,它將被分發。消費者完成後,它會調用sqs來刪除該消息。然後再次輪詢新消息。

在您的方案中,消費者完成消息處理後,可以發出兩個請求:一個將消息排入不同的隊列,另一個將消息從原始隊列中刪除。

如果您有多個消費者列在同一隊列中,那麼消息隱藏期的概念即將發揮作用。如果你有這樣的設置,請在評論中提問,我會更新更多的信息。

希望它有幫助。

+0

你說'消費者定期調查SQS的新項目'消費者是否可以在隊列上偵聽,然後隊列可以推送給客戶端而不是消費者拉動它?由於拉模式不適用於高度可擴展的應用程序。 – user3198603

+1

@ user3198603在這個評論和你原來的問題之間,它聽起來不像你實際上已經閱讀過文檔。通過長輪詢HTTP/S連接將消息推送給消費者......正如[SQS常見問題解答](https://aws.amazon.com/sqs/faqs/)中所述。 –

+0

@ user3198603,如果沒有合適的基礎,可伸縮性受拉的想法是錯誤的。只有當很多員工在很短的時間內碰到一臺服務器時,它纔會受到影響。使用sqs,這兩個因素被這樣消除(1)沒有一臺服務器,而是一組服務器。命中分佈(2)你沒有高頻率擊中。通過長輪詢機制降低頻率。 – inquisitive