

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

# 針對 Amazon SQS ReceiveMessage API 呼叫未傳回的訊息進行故障診斷
<a name="troubleshooting-messages-not-returned-ReceiveMessage"></a>

下列主題涵蓋無法將 Amazon SQS 訊息傳回給消費者的最常見原因，以及如何進行疑難排解。如需詳細資訊，請參閱 *AWS 知識中心指南*中的[為什麼我無法從 Amazon SQS 佇列接收訊息？](https://repost.aws/knowledge-center/sqs-queue-message)。

## 空佇列
<a name="troubleshooting-empty-queue"></a>

若要判斷佇列是否為空，請使用長輪詢來呼叫 [`ReceiveMessage`](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) API。您也可以使用 `ApproximateNumberOfMessagesVisible`、 `ApproximateNumberOfMessagesNotVisible`和 `ApproximateNumberOfMessagesDelayed` CloudWatch 指標。如果所有指標值都設定為 0 幾分鐘，則佇列會被視為空白。

## 已達到飛行中限制
<a name="troubleshooting-in-flight-limit-reached"></a>

如果您使用[長輪詢](sqs-short-and-long-polling.md#sqs-long-polling)，且佇列的傳輸中限制 （預設為 120000) 遭到違反，Amazon SQS 將不會傳回[超過配額限制](sqs-quotas.md)的錯誤訊息。

## 訊息延遲
<a name="troubleshooting-message-delayed"></a>

如果 Amazon SQS 佇列設定為[延遲佇列](sqs-delay-queues.md)，或使用訊息[計時器](sqs-message-timers.md)傳送訊息，則在延遲時間結束之前，不會顯示訊息。若要驗證佇列是否設定為延遲佇列，請使用 [`GetQueueAttributes`](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html) API `DelaySeconds` 屬性，或在**交付延遲**下從佇列主控台進行。檢查 [`ApproximateNumberOfMessagesDelayed`](sqs-available-cloudwatch-metrics.md) CloudWatch 指標以了解是否有任何訊息延遲。

## 訊息正在處理中
<a name="troubleshooting-message-in-flight"></a>

如果不同的取用者輪詢訊息，訊息將在[可見性逾時](sqs-visibility-timeout.md)期間處於進行中或隱藏狀態。其他輪詢可能會傳回空的接收。檢查 [ApproximateNumberOfMessagesVisible](sqs-available-cloudwatch-metrics.md) CloudWatch 指標，以了解可接收的訊息數量。如果是 FIFO 佇列，如果訊息群組 ID 為進行中的訊息，則除非您刪除訊息或訊息變成可見，否則不會再傳回任何訊息。這是因為[訊息排序](sqs-fifo-queues.md)是在 FIFO 佇列中的訊息群組層級維護。

## 輪詢方法
<a name="troubleshooting-polling-method"></a>

如果您使用[短輪詢](sqs-short-and-long-polling.md#sqs-short-polling)，([WaitTimeSeconds](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html#API_ReceiveMessage_RequestSyntax) 為 0) Amazon SQS 會取樣其伺服器的子集，並僅傳回來自這些伺服器的訊息。因此，即使訊息可供接收，您也可能無法取得訊息。後續輪詢請求會傳回訊息。

如果您使用[長輪詢](sqs-short-and-long-polling.md#sqs-long-polling)，Amazon SQS 會輪詢所有伺服器，並在收集至少一個可用訊息後傳送回應，最多達指定的數量上限。如果 ReceiveMessage [WaitTimeSeconds](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html#API_ReceiveMessage_RequestSyntax) 的值太低，您可能不會收到所有可用的訊息。