本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 中使用無效字母佇列 SQS
Amazon SQS支援無效字母佇列 (DLQs),哪些來源佇列可以鎖定未成功處理的訊息。 DLQs 有助於偵錯您的應用程式,因為您可以隔離未取用的訊息,以判斷處理失敗的原因。為了獲得最佳效能,最佳實務是將來源佇列保持在DLQ相同 AWS 帳戶 和 區域內。訊息進入無效字母佇列後,您可以:
-
檢查導致訊息移至無效字母佇列的例外狀況記錄。
-
分析移至無效字母佇列的訊息內容,以診斷應用程式問題。
-
判定您是否有給予消費者儲存的訊息處理時間。
-
使用無效字母佇列重新驅動,將訊息移出無效字母佇列。
您必須先建立新的佇列,才能將其設定為無效字母佇列。如需使用 Amazon SQS主控台設定無效字母佇列的相關資訊,請參閱 了解如何使用 Amazon SQS 主控台設定無效字母佇列。如需無效字母佇列的說明,例如如何為移至無效字母佇列的任何訊息設定警示,請參閱 使用 Amazon 為無效字母隊列創建警報 CloudWatch。
針對無效字母佇列使用政策
使用重新驅動政策來指定 maxReceiveCount
。maxReceiveCount
是取用者在移至無效字母佇列之前,可以接收來源佇列訊息的次數。例如,如果 maxReceiveCount
設定為低值,例如 1,則無法接收訊息會導致訊息移至無效字母佇列。為了確保您的系統能夠抵禦錯誤,請將 maxReceiveCount
設定得夠高,以允許足夠的重試。
再驅動允許政策指定哪些來源佇列能存取無效字母佇列。您可以選擇是否允許所有來源佇列、允許特定來源佇列,或拒絕使用無效字母佇列的所有來源佇列。預設值允許所有來源佇列使用無效字母佇列。如果您選擇使用 byQueue
選項允許特定佇列,您可以使用來源佇列 Amazon Resource Name () 指定最多 10 個來源佇列ARN。若指定 denyAll
,佇列就無法當作無效字母佇列。
了解無效字母佇列的訊息保留期間
對於標準佇列,訊息的到期一律會以其原始排入佇列時間戳記為基礎。訊息被移至無效字母佇列時,排入佇列時間戳記不會變更。ApproximateAgeOfOldestMessage
指標指出訊息何時移至無效字母佇列,而不是訊息最初傳送的時間。例如,假設訊息在移至無效字母佇列之前,在原始佇列中花費 1 天時間。如果無效字母佇列的保留期限為 4 天,則會在 3 天後從無效字母佇列中刪除訊息,而且 ApproximateAgeOfOldestMessage
為 3 天。因此,最佳實務是一律將無效字母佇列的保留期間設定為長於原始佇列的保留期間。
對於FIFO佇列,當訊息移至無效字母佇列時,佇列時間戳記會重設。此 ApproximateAgeOfOldestMessage
測量結果會指出訊息移到無效字母佇列的時間。在上面的相同範例中,訊息會在 4 天後從無效字母佇列中刪除,而且 ApproximateAgeOfOldestMessage
為 4 天。