

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

# Amazon SQS FIFO 佇列和 Lambda 並行行為
<a name="fifo-queue-lambda-behavior"></a>

透過將 FIFO First-In-First-Out佇列與 Lambda 搭配使用，您可以確保在每個訊息群組內依序處理訊息。Lambda 函數不會同時為相同的訊息群組執行多個執行個體，因此會維護順序。不過，它可以擴展以平行處理多個訊息群組，確保有效處理佇列的工作負載。以下幾點說明處理來自 Amazon SQS FIFO 佇列的訊息時，Lambda 函數在訊息群組 IDs方面的行為：
+ **每個訊息群組的單一執行個體：**在任何時間點，只有一個 Lambda 執行個體會處理來自特定訊息群組 ID 的訊息。這可確保相同群組中的訊息會依序處理，以維護 FIFO 序列的完整性。
+ **並行處理不同的群組：**Lambda 可以使用多個執行個體並行處理來自不同訊息群組 IDs的訊息。這表示當 Lambda 函數的一個執行個體正在處理來自一個訊息群組 ID 的訊息時，其他執行個體可以同時處理來自其他訊息群組 IDs 的訊息，利用 Lambda 的並行功能來平行處理多個群組。

## FIFO 佇列訊息分組
<a name="fifo-queue-message-grouping"></a>

FIFO 佇列可確保以傳送訊息的確切順序處理訊息。他們使用**訊息群組 ID** 來分組應循序處理的訊息。

相同訊息群組內的訊息會依序處理，而每個群組一次只會處理一個訊息，以維持此順序。

## Lambda 與 FIFO 佇列並行
<a name="lambda-concurrency-fifo-queues"></a>

建立佇列之後，您可以傳送訊息給佇列。

當您設定 Lambda 函數來處理來自 Amazon SQS FIFO 佇列的訊息時，Lambda 會遵守 FIFO 佇列提供的排序保證。以下幾點說明在使用訊息群組 IDs 處理來自 Amazon SQS FIFO 佇列的訊息時，Lambda 函數在並行和擴展方面的行為。
+ **訊息群組內的並行：**一次只有一個 Lambda 執行個體會處理特定訊息群組 ID 的訊息。這可確保群組中的訊息會循序處理。
+ **擴展和多個訊息群組：**雖然 Lambda 可以同時擴展以處理訊息，但此擴展發生在不同的訊息群組中。如果您有多個訊息群組，Lambda 可以平行處理多個群組，每個群組都由個別的 Lambda 執行個體處理。

如需詳細資訊，請參閱《 *AWS Lambda 操作員指南*》中的 [Lambda 中的擴展和並行](https://docs.aws.amazon.com/lambda/latest/operatorguide/scaling-concurrency.html)。

## 使用案例範例
<a name="lambda-concurrency-fifo-queues-example"></a>

假設您的 FIFO 佇列接收的訊息具有相同的訊息群組 ID，且您的 Lambda 函數具有較高的並行限制 （最多 1000 個）。

如果來自群組 ID 'A' 的訊息正在處理中，而來自群組 ID 'A' 的另一個訊息送達，則第二個訊息在第一個訊息完全處理之前，不會觸發新的 Lambda 執行個體。

不過，如果來自群組 IDs 'A' 和 'B' 的訊息到達，這兩個訊息都可以由個別的 Lambda 執行個體同時處理。