

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

# 搭配 Amazon SQS FIFO 佇列使用訊息群組 ID
<a name="using-messagegroupid-property"></a>

在 FIFO First-In-First-Out佇列中， [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 是將訊息組織成不同群組的屬性。相同訊息群組內的訊息一律以嚴格順序一次處理一個訊息，確保不會同時處理來自相同群組的兩個訊息。在標準佇列中，使用 `MessageGroupId`可啟用[公平佇列](sqs-fair-queues.md)。如果需要嚴格排序，請使用 FIFO 佇列。

**Topics**
+ [在 Amazon SQS 中交錯多個排序的訊息群組](interleaving-multiple-ordered-message-groups.md)
+ [在 Amazon SQS 的多生產者/消費者系統中防止重複處理](avoding-processing-duplicates-in-multiple-producer-consumer-system.md)
+ [避免在 Amazon SQS 中使用相同訊息群組 ID 的大型訊息待處理項目](avoid-backlog-with-the-same-message-group-id.md)
+ [避免在 Amazon SQS 中將相同的訊息群組 ID 與虛擬佇列重複使用](avoiding-reusing-message-group-id-with-virtual-queues.md)

# 在 Amazon SQS 中交錯多個排序的訊息群組
<a name="interleaving-multiple-ordered-message-groups"></a>

若要在單一 FIFO 佇列中交錯多個排序訊息群組，[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)請將 指派給每個群組 （例如，不同使用者的工作階段資料）。這可讓多個取用者同時從佇列讀取，同時確保依順序處理相同群組中的訊息。

當具有特定 的訊息`MessageGroupId`正在處理且隱藏時，直到可見性逾時過期或刪除訊息之前，其他取用者都無法處理來自相同群組的訊息。

# 在 Amazon SQS 的多生產者/消費者系統中防止重複處理
<a name="avoding-processing-duplicates-in-multiple-producer-consumer-system"></a>

在訊息排序不是優先順序的高輸送量、低延遲系統中，生產者可以[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)為每個訊息指派唯一的 。這可確保 Amazon SQS FIFO 佇列即使在多生產者/多消費者設定中也能消除重複項目。雖然此方法可防止重複的訊息，但它不保證訊息排序，因為每個訊息都被視為自己的獨立群組。

在具有多個生產者和消費者的任何系統中，一律會有重複交付的風險。如果消費者無法在可見性逾時到期之前處理訊息，Amazon SQS 會再次提供訊息，可能允許其他消費者接收訊息。若要緩解這種情況，請根據處理時間確保適當的訊息確認和可見性逾時設定。

# 避免在 Amazon SQS 中使用相同訊息群組 ID 的大型訊息待處理項目
<a name="avoid-backlog-with-the-same-message-group-id"></a>

FIFO 佇列最多支援 120，000 個傳輸中訊息 （消費者收到但尚未刪除的訊息）。如果達到此限制，Amazon SQS 不會傳回錯誤，但處理可能會受到影響。您可以聯絡 [AWS Support](https://docs.aws.amazon.com/awssupport/latest/user/create-service-quota-increase.html) 請求提高超過此限制。

FIFO 佇列會掃描前 120，000 則訊息，以判斷可用的訊息群組。如果大型待處理項目累積在單一訊息群組中，稍後傳送的其他群組的訊息將保持封鎖狀態，直到處理待處理項目為止。

**注意**  
當消費者重複無法處理訊息時，可能會發生訊息待處理項目。這可能是因為訊息內容問題或消費者端故障。為避免訊息處理延遲，請設定[無效字母佇列](sqs-dead-letter-queues.md)，在多次失敗嘗試後移動未處理的訊息。這可確保可以處理相同訊息群組中的其他訊息，防止系統瓶頸。

# 避免在 Amazon SQS 中將相同的訊息群組 ID 與虛擬佇列重複使用
<a name="avoiding-reusing-message-group-id-with-virtual-queues"></a>

搭配共用主機佇列使用虛擬佇列時，請避免在不同虛擬佇列[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)之間重複使用相同的佇列。如果多個虛擬佇列共用相同的主機佇列，並包含具有相同 的訊息`MessageGroupId`，則這些訊息可以彼此封鎖，從而防止有效率的處理。為了確保訊息處理順暢，請為不同虛擬佇列中的訊息指派唯一`MessageGroupId`值。