本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
什麼是 Amazon Simple Queue Service?
Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列,可讓您整合與分離分散式軟體系統和元件。Amazon SQS 提供通用結構,例如無效字母佇列和成本分配標籤。它提供一般 Web 服務 API,您可以使用 AWS SDK 支援的任何程式設計語言來存取。
使用 Amazon SQS 的優勢
-
安全性 – 您可以控制誰能傳送訊息到 Amazon SQS 佇列,並從佇列接收訊息。您可以選擇使用預設的 Amazon SQS 受管伺服器端加密 (SSE) 保護佇列中訊息的內容,也可以使用 AWS Key Management Service 中管理的自訂 SSE 金鑰 (AWS KMS) 來傳輸敏感資料。
-
耐用性 - 為了確保訊息的安全,Amazon SQS 將它們存放在多部伺服器上。標準佇列支援至少傳遞訊息一次,而 FIFO 佇列支援恰好處理一次訊息和高輸送量模式。
-
可用性 – Amazon SQS 使用冗餘基礎設施以提供對訊息的高度並行存取,以及產生和消耗訊息的高可用性。
-
可擴展性 – Amazon SQS 可以個別處理每個緩衝的請求,以透明的方式進行擴展來處理負載增加或尖峰,無須任何佈建指示。
-
可靠性 – Amazon SQS 在處理訊息時會鎖定訊息,以便同一時間多個生產者可以傳送、多個消費者可以接收訊息。
-
自訂 - 您的佇列不需完全一樣;舉例來說,您可以在佇列上設定預設延遲。您可以使用 Amazon Simple Storage Service (Amazon S3) 或 Amazon DynamoDB 存放大於 256 KB 的訊息內容,並讓 Amazon SQS 保有指向該 Amazon SQS 物件的指標,或者也可以將大型訊息分割成較小的訊息。
基本 Amazon SQS 架構
本節說明分散式傳訊系統的元件,並說明 Amazon SQS 訊息的生命週期。
分散式佇列
分散式傳訊系統中有三個主要部分:分散式系統的元件、佇列 (在 Amazon SQS 伺服器上分佈),以及佇列中的訊息。
在以下情況中,您的系統有數個生產者 (可傳送訊息到佇列的元件) 以及消費者 (從佇列接收訊息的元件)。佇列 (存放訊息 A 到 E) 將訊息以備援方式存放在多個 Amazon SQS 伺服器上。

訊息生命週期
以下情況說明佇列中 Amazon SQS 訊息從建立到刪除的生命週期。

生產者 (元件 1) 會將訊息 A 傳送至佇列,而訊息會以備援方式分散到 Amazon SQS 伺服器。
當取用者 (元件 2) 準備好處理訊息時,它會使用佇列中的訊息,並傳回訊息 A。在處理訊息 A 時,訊息 A 仍會留在佇列上,在可見性逾時期間內,不會傳回至後續的接收請求。
取用者 (元件 2) 從佇列刪除訊息 A,以防止可見性逾時過期時再次接收和處理訊息。
注意
Amazon SQS 會自動刪除在佇列上存在超過訊息保留期間上限的訊息。預設的訊息保留期間為 4 天。不過可以使用 SetQueueAttributes
動作,將訊息保留期間設為 60 秒至 1,209,600 秒 (14 天)。
Amazon SQS、Amazon MQ 和 Amazon SNS 之間的差異
Amazon SQS、Amazon SNS
Amazon SQS 會將分散式軟體系統和元件分離並擴展為佇列服務。它通常透過單一訂閱者處理訊息,非常適合需要預防訂單和損失的工作流程。為了更廣泛地分佈,整合 Amazon SQS 與 Amazon SNS 可實現廣發訊息模式
Amazon SNS 允許發佈者透過做為通訊管道的主題,將訊息傳送給多個訂閱者。訂閱者會使用支援的端點類型接收已發佈的訊息,例如 Amazon Data Firehose、Amazon SQS、Lambda、HTTP、電子郵件、行動推播通知和行動簡訊 (SMS)。此服務非常適合需要即時通知的情況,例如即時使用者參與或警示系統。為了防止訂閱者離線時訊息遺失,整合 Amazon SNS 與 Amazon SQS 佇列訊息可確保一致的交付。
Amazon MQ 最適合希望從傳統訊息代理程式遷移的企業,支援標準訊息通訊協定,例如 AMQP 和 MQTT,以及 Apache ActiveMQ
下表提供每個 服務資源類型的概觀:
資源類型 | Amazon SNS | Amazon SQS | Amazon MQ |
---|---|---|---|
同步 | 否 | 否 | 是 |
異步 | 是 | 是 | 是 |
佇列 | 否 | 是 | 是 |
發佈者-訂閱者訊息 | 是 | 否 | 是 |
訊息代理程式 | 否 | 否 | 是 |
建議新應用程式使用 Amazon SQS 和 Amazon SNS,因為它們可以從近乎無限的可擴展性和簡單的 API 中受益。他們通常會透過pay-as-you-go定價,為大量應用程式提供更具成本效益的解決方案。我們建議使用 Amazon MQ 從現有訊息代理程式遷移應用程式,這些訊息代理程式依賴 JMS 等 API 或 Advanced Message Queuing Protocol (AMQP)、MQTT、OpenWire 和 Simple Text Oriented Message Protocol (STOMP) 等通訊協定的相容性。