本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
什麼是 Amazon 簡單隊列服務
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 將它們存放在多部伺服器上。標準佇列支援at-least-once 訊息傳遞,而 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
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 和 RabbitMQ。
下表提供每個服務資源類型的概觀:
資源類型 | Amazon SNS | Amazon SQS | Amazon MQ |
---|---|---|---|
同步 | 否 | 否 | 是 |
異步 | 是 | 是 | 是 |
佇列 | 否 | 是 | 是 |
發佈者-訂閱者訊息 | 是 | 否 | 是 |
訊息代理程式 | 否 | 否 | 是 |
建議新應用程式使用 Amazon SQS 和 Amazon SNS,因為它們可以從近乎無限的可擴展性和簡單的 API 中受益。他們通常以其 pay-as-you-go 定價為大量應用程序提供更具成本效益的解決方案。我們建議使用 Amazon MQ 從現有訊息代理程式遷移應用程式,這些代理程式仰賴 API (例如 JMS) 或進階訊息佇列通訊協定 (AMQP)、MQTT 和簡單文字導向訊息通訊協定 (STOMP) 等協定的相容性。 OpenWire