

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SQS
<a name="sqs"></a>

[Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 支援標準佇列，其不保證排序，而 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 也支援訊息篩選，這可讓您根據訊息內文的內容，僅處理佇列中的訊息子集。

## 輪詢
<a name="sqs-polling"></a>

Amazon SQS 支援短輪詢和長輪詢訊息。短輪詢會查詢伺服器子集以尋找可用的訊息，並立即傳回這些訊息。不過，它可能不會傳回所有可用的訊息。當您的應用程式需要盡快取用訊息，或無法容忍等待更長的時間時，這會很有用。

長輪詢會等到已超過可設定的時間量或已接收可設定的訊息數量，再傳回訊息。這可能會減少*空輪詢*的數量，也就是未傳回訊息的輪詢數量，尤其是未接收許多訊息的佇列。減少空輪詢數量可以降低 Amazon SQS 成本，因為此服務會針對每個請求收取費用，而每個輪詢操作都是請求。

## 指引
<a name="sqs-guidance"></a>

在下列情況下，佇列是不錯的選擇：
+ 您想要解耦元件，不需要在它們之間進行同步通訊。
+ 您正在具有不同可用性服務層級協議 (SLAs) 或服務層級目標 (SLOs元件之間進行通訊。
+ 您通常有一組訊息的單一取用者。

如果出現下列情況，請考慮使用替代選項：
+ 您需要同步通訊。
+ 您需要複雜的路由邏輯，才能傳送訊息給正確的消費者。