C#-寫一個 Retry 機制程式碼

C#-寫一個 Retry 機制程式碼

平常,Web 比較多人問關於「時間」的問題是「排程」,在課程被問到「Retry」機制,想想,真的托開發微信API的福,我還真的寫過那麼一小段 Retry 機制的程式碼。完整程式碼沒幾行,就說點小故事,拉點畫面行數吧。

當時我們與微信的測試主機是放在 Azure 東亞(香港)機房,不過因為大陸特別的網路關係,每每從下班之後就變得不穩定,我們某個 API 需要收到對方很明確的回應(成功-失敗)訊息才能往下進行。但好死不死,大陸在下班至午夜的國際網路相當不穩定,以至於我們的 API 常常在下班|半夜被搞死,那段時間,半夜看著Slack的Log偵錯,更是家常便飯。找了好久,才確定那支 API 不是問題點。但問題點來了,對方不知是有意或無意 loss 非內陸的請求,我們知道,把正式機放到 China Azure 就能解決特別的網路問題(後來我們正式機放進去了,還是一堆雷 >__< )。有無更好的解法?想了很久,我決定寫一個 Retry 機制。

Retry演算法

努力回想,大致是以下流程:

  1. 發出請求
  2. 監控結果
  3. 如果沒回應,依設定時間與次數重發請求。
  4. 重覆 step 2, 3。
  5. 取得結果,結束 Retry,執行 API。
  6. 超過 Retry 次數,結束 Retry,執行例外流程。

各位可以寫寫看。搞不好可以寫出更棒的版本。

Retry程式碼

把值抽到組態檔,次數、時間,想怎麼改都行。

Coding for fun. 😉

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。