本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SQS
Amazon SQS 支援標準佇列,其不保證排序,而 FIFO 佇列則保證在指定的訊息群組中排序。
佇列是編目微服務的一種常見方法,可為訊息提供長達 14 天的耐用儲存。佇列由生產者填入,並由取用者耗盡。當您以取用者 AWS Lambda 身分使用 時,您可以將 SQS 佇列設定為事件來源。在此情況下,Lambda 服務事件來源映射 (ESM) 會為您輪詢佇列,並在 Lambda 函數可用時傳送訊息給您的 Lambda 函數。在 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Compute Cloud (Amazon EC2) 等其他類型的運算服務上執行的微服務,必須實作自己的輪詢機制,以便在新訊息可用時從佇列中擷取新訊息。
適用於 Amazon SQS 的 Lambda ESM 也支援訊息篩選,這可讓您根據訊息內文的內容,僅處理佇列中的訊息子集。
輪詢
Amazon SQS 支援短輪詢和長輪詢訊息。短輪詢會查詢伺服器子集以尋找可用的訊息,並立即傳回這些訊息。不過,它可能不會傳回所有可用的訊息。當您的應用程式需要盡快取用訊息,或無法容忍等待更長的時間時,這會很有用。
長輪詢會等到已超過可設定的時間量或已接收可設定的訊息數量,再傳回訊息。這可能會減少空輪詢的數量,也就是未傳回訊息的輪詢數量,尤其是未接收許多訊息的佇列。減少空輪詢數量可以降低 Amazon SQS 成本,因為此服務會針對每個請求收取費用,而每個輪詢操作都是請求。
指引
在下列情況下,佇列是不錯的選擇:
-
您想要解耦元件,不需要在它們之間進行同步通訊。
-
您正在具有不同可用性服務層級協議 (SLAs) 或服務層級目標 (SLOs元件之間進行通訊。
-
您通常有一組訊息的單一取用者。
如果出現下列情況,請考慮使用替代選項:
-
您需要同步通訊。
-
您需要複雜的路由邏輯,才能傳送訊息給正確的消費者。