微服務 Ocelot熔斷

2022-09-19 09:42:17 字數 2102 閱讀 3119

ocelot快取

閘道器除了可以做請求**外,還可以做快取功能。

在閘道器服務的自定配置檔案configuration.json中新增快取配置節點,就可以實現將相同請求在一定時間內返回同一內容,閘道器直接將後面的請求攔截並處理,請求不會被**到consul。

"

filecacheoptions

":

"filecacheoptions":

在10秒鐘之內請求閘道器位址,返回的是同乙個內容:

ocelot限流

限制請求在1分鐘只能最多請求5次,超過5次則不可請求。5秒鐘過後可繼續請求。要完成這樣乙個需求,需要用到閘道器的限流機制。

配置檔案configuration.json中新增限流配置節點:

限流:限制單位時間內請求數量(防爬蟲,防ddos等)

"ratelimitoptions

":

"

globalconfiguration":

}

//限流:限制單位時間內請求數量(防爬蟲,防ddos等)

"ratelimitoptions":

"globalconfiguration":

}ratelimitoptions配置項對請求的次數和時長做具體限制。

ratelimitoptions配置項對限流後返回內容做設定,比如自定義狀態碼,用999來表示已超過最大訪問限流值。

一分鐘之內請求超過5次,會返回如下資訊:

ocelot熔斷

請求在5秒鐘之內沒有返回內容,那麼本次請求就算超時。要完成這樣乙個需求,需要用到閘道器的熔斷機制。

使用nuget在閘道器專案中引用程式集:ocelot.provider.polly

配置檔案configuration.json中新增熔斷配置節點:

熔斷:達成某些條件後,介面暫不提供服務

"qosoptions

": //熔斷:達成某些條件後,介面暫不提供服務

"qosoptions":

用一句話描述上述配置:對http://localhost:9526/apiservice/values/timeout請求超過1s將會超時,發生三次超時後保持60s熔斷。

要檢查熔斷機制有沒有生效,在webapi的控制器中加乙個方法:

讓執行緒休息6秒鐘。以達到超過配置項中1秒超時的目的。

從瀏覽器看這個請求返回503,代表請求被伺服器拒絕訪問。實際已經執行了,從log可以看出:

因為配置了熔斷策略,所以這個超過1秒鐘的請求被閘道器認為是超時請求。

可以看到在前4次請求,time在1000ms之後返回503,在第四次以後發生熔斷,請求後立即(time在100ms左右)返回503。

參考文章:

微服務熔斷原理

一 問題的產生 為什麼要引入熔斷 微服務架構的應用系統通常包含多個服務層。微服務之間通過網路進行通訊,從而支撐起整個應用系統,因此,微服務之間難免存在依賴關係。我們知道,任何微服務都並非100 可用,網路往往也很脆弱,因此難免有些請求會失敗。我們常把 基礎服務故障 導致 級聯故障 的現象稱為雪崩效應...

c 微服務Ocelot閘道器服務發現

前面提到微服務方案,介紹了該東西,推薦一篇介紹博文 我要說的是ocelot服務發現方案,其自身已經整合了consul,eureka服務發現,其專案名稱分別是ocelot.provider.consul,ocelot.provider.eureka。配置使用方法 globalconfiguration...

微服務之熔斷器

熔斷器模式可以防止應用程式不斷地嘗試執行可能會失敗的操作,使得應用程式繼續執行而不用等待修正錯誤,或者浪費cpu時間去等到長時間的超時產生。熔斷器模式也可以使應用程式能夠診斷錯誤是否已經修正,如果已經修正,應用程式會再次嘗試呼叫操作。假設我們有兩個服務servicea serviceb,servic...