13.2.2 從故障中恢復
世界銀行服務對每個使用者金鑰每一天請求數量有限制,也限制了請求的頻率。這意味著,如果我們一次執行大量的請求,有些可能會返回錯誤。解決方法是捕獲異常,稍後重試請求。
清單 13.7 實現乙個迴圈,重複執行的請求,直到成功,或者嘗試 20 次。使用異常報告失敗, 使用 f# 的 try … with 結構捕捉異常。
listing 13.7 running the web request repeatedly (f# interactive)
> let worldbankdownload(properties) =
let url = worldbankurl(properties)
let rec loop(attempts) = async
loop(20);;
val worldbankdownload : seq-> async
> let props = ["countries"], ["region", "na"];
val props : string list * (string * string) list
> async.runsynchronously(worldbankdownload(props))
failed, retrying (20): [("countries"); ("region", "na")]
val it : string = "<?xml version=\"1.0\" encoding=\"utf-8\" (...)"
同時在 f# 中的 try … with 塊類似於 c# 中的 try … catch,但還有一些額外的功能。它能夠使用模式匹配區分不同的異常,with 結構非常類似於我們已經熟悉的 match 表示式。在清單 13.7 中,我們簡單地捕捉所有異常,因此,僅僅新增了wher 子句。這意味著,將只捕獲嘗試的次數少於 20 異常。這是值得注意的,我們將在非同步工作流內部處理異常,其方式與在正常的 f# **中處理異常是相同的。這可能要歸功於其他的基元,叫 trywith 和 tryfinally,在其下提供非同步工作;這些基元告訴 f#,在非同步操作期間,如何處理發生的異常。
13 2 2 從故障中恢復
13.2.2 從故障中恢復 世界銀行服務對每個使用者金鑰每一天請求數量有限制,也限制了請求的頻率。這意味著,如果我們一次執行大量的請求,有些可能會返回錯誤。解決方法是捕獲異常,稍後重試請求。清單 13.7 實現乙個迴圈,重複執行的請求,直到成功,或者嘗試 20 次。使用異常報告失敗,使用 f 的 t...
13 2 2 從故障中恢復
13.2.2 從故障中恢復 世界銀行服務對每個使用者金鑰每天請求數量有限制,還限制了請求的頻率,因此,如果我們一次執行大量的請求,有可能會出錯。解決的方法是捕獲異常,稍後重試請求。清單 13.7 實現的迴圈,重複執行請求,直到成功,或者嘗試 20 次為止。使用異常報告失敗,使用 f 的 try wi...
如何從SLB故障中快速恢復
3月14日17 32 19 10時段,阿里雲杭州區可用區e的大量slb出現服務不可用的問題,疑似健康檢查系統出現故障,所有後端節點不論是否監控都一律都被標記為 異常 導致tcp slb的服務connection failed,http slb出現502錯誤。小博無線線上業務系統完全基於阿里雲搭建,在...