Amazon Simple Queue Service (Amazon SQS) 是可讓您存取訊息佇列的 Web 服務,佇列中存放等待處理的訊息。使用 Amazon SQS,您可以快速建置可在任何電腦上執行的訊息佇列應用程式。

Amazon SQS 提供可靠、安全且可高度擴展的託管佇列服務,以存放在電腦之間傳輸的訊息。使用 Amazon SQS,您可以在各種分散式應用程式元件之間移動資料,既不會遺失訊息,而且每個元件也不需要一直處於可用狀態。您可以使用與 AWS Key Management Service (KMS) 整合的 Amazon SQS 伺服器端加密 (SSE) 在應用程式之間交換敏感資料。

Amazon SQS 與 Amazon Elastic Compute Cloud (Amazon EC2) 和其他 AWS 基礎設施 Web 服務密切合作,可協助您建置具備去耦元件的分散式應用程式。

Amazon SQS 針對不同的應用程式需求提供兩種佇列類型:

標準佇列
Amazon SQS 提供標準做為預設的佇列類型。標準佇列可讓您每秒有近乎無限的交易數。標準佇列可保證訊息至少會交付一次。然而,偶爾 (由於允許高輸送量的高度分散式架構) 可能會有一個以上的訊息副本無法依順序交付。標準佇列會盡力提供最佳的排序功能,以確保訊息通常可按照傳送的順序來交付。

FIFO 佇列 – 全新!
FIFO 可補充標準佇列的不足之處。此佇列類型最重要的功能就是 FIFO (先入先出) 交付,並且只處理一次:嚴格保持訊息傳送和接收的順序,而且訊息只會交付一次,並在消費者處理和刪除該訊息之前保持可用狀態;此佇列不會引入重複項目。FIFO 佇列還支援訊息群組,允許單一佇列中有多個已排序的串流。FIFO 佇列的限制為每個 API 動作每秒 300 個交易數 (TPS),但擁有標準佇列的所有功能。

 

開始免費使用 AWS

建立免費帳戶
或者,請登入主控台

AWS 免費方案包含 100 萬個 Amazon Simple Queue Service (SQS) 請求。

查看 AWS 免費方案詳細資訊 »

Capital One 分享他們如何使用 Amazon SQS 將核心銀行應用程式遷移到雲端。

sqs_thumb_reInvent2016-migrating-ent-messaging

使用者可以透過 AWS 管理主控台輕鬆存取 Amazon SQS,使用這個以 Web 為基礎的點選式界面設定和管理 Amazon SQS。

Amazon SQS 採用簡單的界面,不僅易於使用,而且非常靈活。提供以下請求:

基本訊息操作

  • SendMessage:傳送訊息到指定的佇列。
  • ReceiveMessage:從指定的佇列傳回一或多個訊息。
  • DeleteMessage:從指定的佇列移除之前接收的訊息。
  • ChangeMessageVisibility:變更之前所接收訊息的可見性逾時。

批次訊息操作

  • SendMessageBatch:傳送多個訊息到指定的佇列。
  • DeleteMessageBatch:從指定的佇列移除多個之前接收的訊息。
  • ChangeMessageVisibilityBatch:變更多個之前所接收訊息的可見性逾時。

基本佇列管理

  • CreateQueue:建立可與 AWS 帳戶搭配使用的佇列。
  • ListQueues:列出現有的佇列。
  • DeleteQueue:刪除其中一個佇列。
  • PurgeQueue:刪除佇列中的所有訊息。

進階佇列管理

  • SetQueueAttributes:控制佇列設定,例如可見性逾時 (讀取訊息後,使它們無法再次被讀取的鎖定時間量)、延遲值或無效字母佇列參數。
  • GetQueueAttributes:取得佇列相關資訊,例如可見性逾時、佇列中訊息數或訊息大小上限。
  • GetQueueUrl:取得佇列 URL。
  • AddPermission:針對指定的佇列為其他 AWS 帳戶新增佇列共用。
  • RemovePermission:針對指定的佇列從佇列共用移除 AWS 帳戶。
  • ListDeadLetterSourceQueues:列出連接到無效字母佇列的佇列。

如需詳細資訊,請參閱 Amazon SQS API 參考

Amazon SQS 中儲存的訊息具有生命週期,不僅能輕鬆管理,還可以確保能處理所有訊息。

  1. 需要傳送訊息的系統將選取 Amazon SQS 佇列,並使用 SendMessage 將新訊息傳送到佇列。
  2. 而處理訊息的另一個系統需要較多訊息進行處理,所以會呼叫 ReceiveMessage,然後傳回此訊息。
  3. 訊息一旦由 ReceiveMessage 傳回,除非可見性逾時已過,否則不會由其他 ReceiveMessage 傳回。這可避免多個消費者同時處理相同的訊息。
  4. 如果處理訊息的系統順利完成此訊息處理,會呼叫 DeleteMessage 將訊息從佇列移除,系統就不會再次處理該訊息。如果此系統無法處理訊息,只要可見性逾時已過,便會由另一個 ReceiveMessage 呼叫讀取訊息。
  5. 如果來源佇列有與其關聯的無效字母佇列,系統會在達到指定的交付嘗試次數上限之後,將訊息移到無效字母佇列。
  • 開發人員可以建立任意數量的 Amazon SQS 佇列,佇列可包含不限數量的訊息。
    • 可以在任何區域建立佇列。
    • 訊息承載最多可包含 256 KB 的文字 (格式不限)。承載的每個 64 KB「區塊」以 1 次請求計費。例如,一個 256 KB 承載的單一 API 呼叫將以四次請求計費。
    • 可以批次傳送、接收或刪除訊息,每批次最多能處理 10 則訊息或 256 KB。批次成本與單一訊息成本相同,表示對使用批次處理的客戶來說,SQS 經濟效益更佳。
    • 若要傳送大於 256 KB 的訊息,可以使用 Amazon SQS Extended Client Library for Java (其使用 Amazon S3 存放訊息承載)。訊息承載的參考是使用 SQS 傳送。
    • 長輪詢減少額外的輪詢,有助於盡量降低成本,同時以最快的速度接收新訊息。當您的佇列處於空的狀態時,長輪詢請求下一則訊息最多等待 20 秒。長輪詢請求和一般請求的成本相同。
    • 佇列中的訊息最多可以保留 14 天。
    • 可以同時傳送和讀取訊息。
  • 收到訊息後,處理期間會變成「鎖定」狀態。這可防止其他電腦同時處理該訊息。如果訊息處理失敗,鎖定將會過期,而訊息可再次處理。如果應用程式需要更多的處理時間,則可透過 ChangeMessageVisibility 操作動態變更「鎖定」逾時。
  • 開發人員可以用匿名方式或透過特定的 AWS 帳戶安全地共享 Amazon SQS 佇列。佇列共用也可以依 IP 地址和一天中的時間加以限制。
  • 全新!伺服器端加密 (SSE) 使用 AWS Key Management Service (AWS KMS) 中管理的金鑰保護 Amazon SQS 佇列中的訊息內容。SSE 在 Amazon SQS 一收到訊息時立刻加密。訊息以加密格式存放,而 Amazon SQS 只會在訊息傳送給授權的取用者時才會解密訊息。
  • 當與 Amazon Simple Notification Service (SNS) 結合使用,開發人員可「散發」相同的訊息到多個標準 SQS 佇列。使用散發時,發佈到 SNS 主題的訊息會同時散發給數個 SQS 標準佇列。使用散發,開發人員可以建立使用平行、非同步處理的應用程式。例如,每次上傳新的映像時,開發人員可以發佈訊息到主題。獨立程序,每次從獨立的佇列讀取,都可以產生縮圖、執行映像辨識和存放關於映像的中繼資料。SNS 目前不支援 FIFO 排序,因為也不支援散發到 FIFO 佇列。
  • 開發人員可以使用無效字母佇列處理停滯訊息 (消費者未成功處理的訊息)。當超過訊息的最大接收數時,訊息會移到與原始佇列相關的無效字母佇列 (DLQ)。開發人員可以針對 DLQ 設定個別的消費者程序,協助分析和了解訊息停滯的原因。DLQ 的類型必須與來源佇列 (標準或 FIFO) 一樣。

Amazon SQS 訊息佇列可以和其他 AWS 服務搭配使用,例如 RedshiftDynamoDBRDSEC2ECSLambdaS3,讓分散式應用程式更具可擴展性且更可靠。以下是常見的設計模式:

  • 工作佇列:分離分散式應用程式的元件,不會全部同時處理相同的工作量。
  • 緩衝和批次操作:加入架構的可擴展性和可靠性,消除臨時容量峰值且不會遺失訊息或增加延遲。
  • 請求卸載:透過將請求排入佇列的方式,將慢速操作從互動請求路徑移除。
  • 散發結合 SQS 和 Simple Notification Service (SNS),將相同的訊息備份傳送給多個平行佇列。
  • 優先順序:使用個別的佇列以提供工作的優先順序。
  • 可擴展性:由於訊息佇列會將您的程序去耦,因此可以輕鬆地擴展訊息的傳送或接收速率 – 只要新增其他程序。
  • 彈性:當您的部分系統失敗時,不需要關閉整個系統。訊息佇列會將系統的元件去耦,因此,如果從佇列讀取訊息的某個程序失敗,當系統復原後,仍然可以將訊息新增到待處理佇列。

使用本服務需遵守 Amazon Web Services 客戶協議