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 管理主控台輕鬆存取 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 中儲存的訊息具有生命週期,不僅能輕鬆管理,還可以確保能處理所有訊息。
- 需要傳送訊息的系統將選取 Amazon SQS 佇列,並使用 SendMessage 將新訊息傳送到佇列。
- 而處理訊息的另一個系統需要較多訊息進行處理,所以會呼叫 ReceiveMessage,然後傳回此訊息。
- 訊息一旦由 ReceiveMessage 傳回,除非可見性逾時已過,否則不會由其他 ReceiveMessage 傳回。這可避免多個消費者同時處理相同的訊息。
- 如果處理訊息的系統順利完成此訊息處理,會呼叫 DeleteMessage 將訊息從佇列移除,系統就不會再次處理該訊息。如果此系統無法處理訊息,只要可見性逾時已過,便會由另一個 ReceiveMessage 呼叫讀取訊息。
- 如果來源佇列有與其關聯的無效字母佇列,系統會在達到指定的交付嘗試次數上限之後,將訊息移到無效字母佇列。
- 開發人員可以建立任意數量的 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) 一樣。
- 工作佇列:分離分散式應用程式的元件,不會全部同時處理相同的工作量。
- 緩衝和批次操作:加入架構的可擴展性和可靠性,消除臨時容量峰值且不會遺失訊息或增加延遲。
- 請求卸載:透過將請求排入佇列的方式,將慢速操作從互動請求路徑移除。
- 散發:結合 SQS 和 Simple Notification Service (SNS),將相同的訊息備份傳送給多個平行佇列。
- 優先順序:使用個別的佇列以提供工作的優先順序。
- 可擴展性:由於訊息佇列會將您的程序去耦,因此可以輕鬆地擴展訊息的傳送或接收速率 – 只要新增其他程序。
- 彈性:當您的部分系統失敗時,不需要關閉整個系統。訊息佇列會將系統的元件去耦,因此,如果從佇列讀取訊息的某個程序失敗,當系統復原後,仍然可以將訊息新增到待處理佇列。
使用本服務需遵守 Amazon Web Services 客戶協議。