我有一個用例來了解在我的代碼中讀取了多少次 sqs 訊息。
例如,我們從 SQS 讀取訊息,由于 abc 原因/例外,我們無法處理該訊息。現在,在可見性超時后可以在佇列中讀取相同的訊息。
這將創建無限回圈。有沒有辦法知道特定的 sqs 訊息已被讀取多少次并回傳到佇列中。
我知道這可以通過死信佇列處理。由于這需要更多的努力,我正在檢查是否還有其他選擇
如果失敗超過 x 次,我不想重試該訊息并且我想洗掉它。SQS有可能嗎
uj5u.com熱心網友回復:
呼叫 時ReceiveMessage(),您可以指定AttributeNames要回傳的串列。
其中一個屬性是ApproximateReceiveCount,它回傳“所有佇列中收到訊息但未洗掉的次數”。
由于 SQS 的高度并行特性,這是一個“近似”計數——如果訊息與此請求同時處理,則計數可能會略微偏離。
uj5u.com熱心網友回復:
您可以通過查看approximateReceiveCount訊息的屬性來手動執行此操作,請參閱有關如何執行此操作的問題。您只需要實作讀取計數的邏輯并決定是嘗試處理訊息還是洗掉它。但是請注意,這receiveCount不僅僅受到以編程方式處理訊息的影響:在控制臺中查看訊息也會增加它。
話雖如此,DLQ 正是針對此用例的預制解決方案。這不是很多額外的作業:您所要做的就是創建另一個 SQS 佇列,將其設定為您的處理佇列的 DLQ,并設定重試次數。然后,DLQ 處理您所有的重新驅動邏輯,而不是在n失敗后洗掉訊息,而是將它們移動到 DLQ,您可以在其中手動查看它們以了解它們失敗的原因,在佇列上設定指標警報,如果您想要手動將訊息重新驅動到您的處理佇列中。或者只是忽略它們,直到它們根據其保留策略從佇列中老化 - 重要的是 DLQ 為您提供了選擇 能夠看到哪些訊息在事后失敗,而徹底洗掉它們則不然。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387617.html
