iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Build on AWS

亞馬遜熱帶雨林生存日記系列 第 16

Day 16: 使用 SQS Dead Letter Queue 緩解 AWS Lambda Exception 造成 message 囤積在 SQS 的問題

  • 分享至 

  • xImage
  •  

Day 7: 設定 AWS SQS 為 Lambda 的 trigger 有提到要怎麼設定 AWS SQS 為 Lambda 的 trigger ,接下來要繼續討論,如何優化 Lambda 和 SQS 的設計,避免因為執行時發生 的 Exception ,造成 Lambda 多次觸發, message 囤積在 SQS 的問題

為什麼我們需要 Dead-letter queue ?

因為 Lambda 有 retry 機制,所以當 Lambda 執行發生例外( Exception )時,該 message 會返回 SQS ,並重新排隊等待處理,這時候如果又有新的 message 被塞到 SQS 中,會不斷把 message 囤積在 SQS 的 queue ,最後會造成 queue 中的 message 累積過多, message 要經過很久的時間才會被執行

而在 SQS 設定 Dead-letter queue 可以減緩這個問題,讓 message 在 retry 幾次之後,移到另外一個 queue ,原本的 queue 就可以不受這些失敗的 message 干擾,開發人員也能針對那些有問題的 message 進行 debug 或重新執行

在這邊簡單設計一個實驗,證明 Lambda 的 Exception 真的會造成 message 囤積在 queue 的情況。首先,在 Lambda 的程式碼直接丟出 Exception 。

接下來把 13 個 message 丟到 queue,可以很清楚的在 SQS 的監控中看到,所有 message 都執行失敗的情況下,這 13 個 message 一直囤積在 queue 中。

如何在 SQS 加上 Dead Letter Queue ?

首先,點選 Edit 對 queue 進行編輯。

接著,拉到 Dead-letter queue 那邊,並且選擇 Enable ,然後選擇另外一個 queue ,最後存檔就完成設定了。

設定完Dead-letter queue之後?

設完 Dead-letter queue 之後,可以看到設定給 Lambda 當 trigger 的 SQS queue ,沒有一直重複接收執行失敗的 message ,堆積問題得到有效緩解。

接著到 Dead-letter queue 那邊,可以看到 Dead-letter queue 確實收到13個失敗的 message ,緩解了 Lambda Exception 造成 message 囤積在原本的 queue 的問題。

medium: 使用 SQS Dead Letter Queue 緩解 AWS Lambda Exception 造成 message 囤積在 SQS 的問題


上一篇
Day 15: 使用 AWS Lambda 的 Concurrency 機制處理高流量應用 (下)
系列文
亞馬遜熱帶雨林生存日記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言