針對 Amazon SQS ReceiveMessage API 呼叫未傳回的訊息進行疑難排解 - Amazon Simple Queue Service

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

針對 Amazon SQS ReceiveMessage API 呼叫未傳回的訊息進行疑難排解

下列主題涵蓋 Amazon SQS 訊息可能無法傳回給消費者的最常見原因,以及如何進行疑難排解。如需詳細資訊,請參閱為什麼我無法從 Amazon SQS 佇列接收訊息? 在AWS 知識中心指南

清空佇列

若要判斷佇列是否為空,請使用長輪詢呼叫 ReceiveMessageAPI。您也可以使用ApproximateNumberOfMessagesVisibleApproximateNumberOfMessagesNotVisible、和ApproximateNumberOfMessagesDelayed CloudWatch 量度。如果所有測量結果值都設為 0 數分鐘,佇列就會被視為空白。

達到飛行限制

如果您使用長輪詢,而且違反佇列的飛行限制 (FIFO 為 20000,預設為標準為 120000),Amazon SQS 將不會傳回超過配額限制的錯誤訊息。

訊息延遲

如果 Amazon SQS 佇列設定為延遲佇列,或是使用訊息計時器傳送訊息,則在延遲時間結束之前都不會顯示訊息。若要確認佇列是否設定為延遲佇列,請使用 GetQueueAttributesAPI DelaySeconds 屬性,或從 [傳遞延遲] 下的佇列主控台。檢查ApproximateNumberOfMessagesDelayed CloudWatch 測量結果以瞭解是否有任何訊息延遲。

訊息正在進行中

如果有不同的消費者輪詢了訊息,訊息將處於暫停狀態,或在可見性逾時期間看不見訊息。額外的民意調查可能會傳回空的接收。檢查ApproximateNumberOfMessagesVisible CloudWatch測量結果以瞭解可接收的訊息數目。在 FIFO 佇列的情況下,如果具有訊息群組識別碼的訊息正在進行中,則除非您刪除該訊息或變成可見,否則不會再傳回任何訊息。這是因為訊息排序會維持在 FIFO 佇列中的訊息群組層級。

輪詢方法

如果您使用的WaitTimeSeconds短輪詢,(為 0) Amazon SQS 會對其伺服器的一個子集進行抽樣,並僅從這些伺服器傳回訊息。因此,即使可以接收郵件,您也可能無法收到這些消息。後續的輪詢要求將傳回訊息。

如果您使用長輪詢,Amazon SQS 會輪詢所有伺服器,並在收集至少一個可用訊息並達到指定的最大數目之後傳送回應。如果的值 ReceiveMessage WaitTimeSeconds太低,您可能不會收到所有可用的訊息。