在 .NET 8 Web API 中實現彈性

在現代 Web 開發中,構建彈性 API 對于確保可靠性和性能至關重要。本文將指導您使用 Microsoft.Extensions.Http.Resilience 庫在 .NET 8 Web API 中實現彈性。我們將介紹如何設置重試策略和超時,以使您的 API 更能抵御瞬時故障。

步驟 1.創建一個新的 .NET 8 Web API 項目

首先,如果您沒有現有項目,請使用 .NET CLI 創建一個或使用默認的 Web API 模板。

步驟 2.添加所需的 NuGet 包

接下來,通過 NuGet 安裝Microsoft.Extensions.Http.Resilience庫:

dotnet add package Microsoft.Extensions.Http.Resilience --version 8.0.0

步驟 3.在 Program.cs 中配置 Resilience

修改 Program.cs 文件以使用 Microsoft.Extensions.Http.Resilience 提供的彈性策略設置 HttpClient。在這里,我們將定義重試策略和超時。

// 添加Resilience Pipeline
builder.Services.AddResiliencePipeline("default", x =>
{// 添加重試策略x.AddRetry(new Polly.Retry.RetryStrategyOptions{// 設置重試條件,處理所有異常ShouldHandle = new PredicateBuilder().Handle<Exception>(),// 設置重試的延遲時間為2秒Delay = TimeSpan.FromSeconds(2),// 最大重試次數為2次MaxRetryAttempts = 2,// 使用指數退避策略BackoffType = DelayBackoffType.Exponential,// 啟用抖動,增加隨機性以減少碰撞UseJitter = true})// 添加超時策略,超時時間為30秒.AddTimeout(TimeSpan.FromSeconds(30));
});

步驟 4.在服務中使用彈性 HttpClient

接下來,我們將在您的服務中注入并使用已配置的 HttpClient。此示例展示了如何使用彈性 HttpClient 從外部 API 獲取數據。

public class WeatherService
{// HttpClient實例,用于發送HTTP請求private readonly HttpClient _httpClient;// 彈性管道提供程序private readonly ResiliencePipelineProvider<string> _resiliencePipelineProvider;// 構造函數,注入HttpClient和ResiliencePipelineProvider實例public WeatherService(HttpClient httpClient,ResiliencePipelineProvider<string> resiliencePipelineProvider){_httpClient = httpClient;_resiliencePipelineProvider = resiliencePipelineProvider;}// 異步方法,獲取天氣信息public async Task<string> GetWeatherAsync(){// 獲取默認的彈性管道var pipeline = _resiliencePipelineProvider.GetPipeline("default");// 使用彈性管道執行HTTP GET請求var response = await pipeline.ExecuteAsync(async ct => await _httpClient.GetAsync($"https://localhost:7187/weatherforecast", ct));// 返回響應內容的字符串表示return await response.Content.ReadAsStringAsync();}
}

步驟 5. 在 Program.cs 中添加端點

app.MapGet("/weatherService/weather", async (WeatherService weatherService) =>
{// 調用WeatherService的GetWeatherAsync方法,獲取天氣信息var result = await weatherService.GetWeatherAsync();// 返回結果return result;
})// 設置該端點的名稱為 "GetWeather".WithName("GetWeather")// 使該端點在OpenAPI文檔中可見.WithOpenApi();

步驟 6. 運行應用程序

最后,運行您的應用程序并導航到端點以查看彈性 HttpClient 的實際運行。

結論

通過執行這些步驟,您已使用 Microsoft.Extensions.Http.Resilience 庫將彈性集成到 .NET 8 Web API 項目中。重試策略、斷路器設置和超時將有助于確保您的 API 能夠抵御瞬時故障,從而提高其可靠性和用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40870.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

集成學習(一)Bagging

前邊學習了&#xff1a;十大集成學習模型&#xff08;簡單版&#xff09;-CSDN博客 Bagging又稱為“裝袋法”&#xff0c;它是所有集成學習方法當中最為著名、最為簡單、也最為有效的操作之一。 在Bagging集成當中&#xff0c;我們并行建立多個弱評估器&#xff08;通常是決策…

排序——數據結構與算法 總結8

目錄 8.1 排序相關概念 8.2 插入排序 8.2.1 直接插入排序&#xff1a; 8.2.2 折半插入排序&#xff1a; 8.2.3 希爾排序&#xff1a; 8.3 交換排序 8.3.1 冒泡排序&#xff1a; 8.3.2 快速排序&#xff1a; 8.4 選擇排序 8.4.1 簡單選擇排序 8.4.2 堆排序 8.5 歸并…

磁盤就是一個超大的Byte數組,操作系統是如何管理的?

磁盤在操作系統的維度看&#xff0c;就是一個“超大的Byte數組”。 那么操作系統是如何對這塊“超大的Byte數組”做管理的呢&#xff1f; 我們知道在邏輯上&#xff0c;上帝說是用“文件”的概念來進行管理的。于是&#xff0c;便有了“文件系統”。那么&#xff0c;文件系統…

當前國內可用的docker加速器搜集 —— 筑夢之路

可用鏡像加速器 以下地址搜集自網絡&#xff0c;僅供參考&#xff0c;請自行驗證。 1、https://docker.m.daocloud.io2、https://dockerpull.com3、https://atomhub.openatom.cn4、https://docker.1panel.live5、https://dockerhub.jobcher.com6、https://hub.rat.dev7、http…

最新版情侶飛行棋dofm,已解鎖高階私密模式,單身狗務必繞道!(附深夜學習資源)

今天阿星要跟大家聊一款讓阿星這個大老爺們兒面紅耳赤的神奇游戲——情侶飛行棋。它的神奇之處就在于專為情侶設計&#xff0c;能讓情侶之間感情迅速升溫&#xff0c;但單身狗們請自覺繞道&#xff0c;不然后果自負哦&#xff01; 打開游戲&#xff0c;界面清新&#xff0c;操…

HTML5使用<progress>進度條、<meter>刻度條

1、<progress>進度條 定義進度信息使用的是 progress 標簽。它表示一個任務的完成進度&#xff0c;這個進度可以是不確定的&#xff0c;只是表示進度正在進行&#xff0c;但是不清楚還有多少工作量沒有完成&#xff0c;也可以用0到某個最大數字&#xff08;如&#xff1…

vs2022安裝qt vs tool

1 緣由 由于工作的需要&#xff0c;要在vs2022上安裝qt插件進行開發。依次安裝qt&#xff0c;vs2022&#xff0c;在vs2022的擴展管理中安裝qt vs tool。 2 遇到困難 問題來了&#xff0c;在qt vs tool的設置qt version中出現問題&#xff0c;設置msvc_64-bit時出現提示“invali…

西安石油大學 課程習題信息管理系統(數據庫課設)

主要技術棧 Java Mysql SpringBoot Tomcat HTML CSS JavaScript 該課設必備環境配置教程&#xff1a;&#xff08;參考給出的鏈接和給出的關鍵鏈接&#xff09; JAVA課設必備環境配置 教程 JDK Tomcat配置 IDEA開發環境配置 項目部署參考視頻 若依框架 鏈接數據庫格式注…

【中項第三版】系統集成項目管理工程師 | 第 4 章 信息系統架構① | 4.1-4.2

前言 第4章對應的內容選擇題和案例分析都會進行考查&#xff0c;這一章節屬于技術相關的內容&#xff0c;學習要以教材為準。本章分值預計在4-5分。 目錄 4.1 架構基礎 4.1.1 指導思想 4.1.2 設計原則 4.1.3 建設目標 4.1.4 總體框架 4.2 系統架構 4.2.1 架構定義 4.…

Invoice OCR

Invoice OCR 發票識別 其他類型ORC&#xff1a; DIPS_YTPC OCR-CSDN博客

25款404網頁源碼(上)

25款404網頁源碼&#xff08;上&#xff09; 1部分源碼 2部分源碼 3部分源碼 4部分源碼 5部分源碼 6部分源碼 7部分源碼 8部分源碼 9部分源碼 10部分源碼 11部分源碼 12部分源碼 領取完整源碼下期更新 1 部分源碼 <!DOCTYPE html> <html><!-- 優選源碼 gulang.…

數據結構基礎--------【二叉樹基礎】

二叉樹基礎 二叉樹是一種常見的數據結構&#xff0c;由節點組成&#xff0c;每個節點最多有兩個子節點&#xff0c;左子節點和右子節點。二叉樹可以用來表示許多實際問題&#xff0c;如計算機程序中的表達式、組織結構等。以下是一些二叉樹的概念&#xff1a; 二叉樹的深度&a…

Element-UI - el-table中自定義圖片懸浮彈框 - 位置優化

該篇為前一篇“Element-UI - 解決el-table中圖片懸浮被遮擋問題”的優化升級部分&#xff0c;解決當圖片位于頁面底部時&#xff0c;顯示不全問題優化。 Vue.directive鉤子函數已在上一篇中詳細介紹&#xff0c;不清楚的朋友可以翻看上一篇&#xff0c; “Element-UI - 解決el-…

深入刨析Redis存儲技術設計藝術(二)

三、Redis主存儲 3.1、存儲相關結構體 redisServer:服務器 server.h struct redisServer { /* General */ pid_t pid; /* Main process pid. */ pthread_t main_thread_id; /* Main thread id */ char *configfile; /* Absolut…

Interpretability 與 Explainability 機器學習

「AI秘籍」系列課程&#xff1a; 人工智能應用數學基礎人工智能Python基礎人工智能基礎核心知識人工智能BI核心知識人工智能CV核心知識 Interpretability 模型和 Explainability 模型之間的區別以及為什么它可能不那么重要 當你第一次深入可解釋機器學習領域時&#xff0c;你會…

Zabbix配置文件中Server和ServerActive參數講解

目錄 參數總結 實例&#xff1a; Zabbix Server 配置 (zabbix_server.conf) Zabbix Agent 配置 (zabbix_agentd.conf) 配置文件解析 實際應用 Zabbix Server 配置文件 (zabbix_server.conf) 對代理端的影響 1. Server 參數 2. ServerActive 參數 Zabbix Agent 配置文…

ubuntu 22 安裝 lua 環境 編譯lua cjson 模塊

在 windows 下使用 cygwin 編譯 lua 和 cjson 簡直就是災難&#xff0c;最后還是到 ubuntu 下完成了。 1、下載lua源碼&#xff08;我下載的 5.1 版本&#xff0c;后面還有一個小插曲), 直接解壓編譯&#xff0c;遇到一個 readline.h not found 的問題&#xff0c;需要安裝 re…

python使用langchain整合通義千文

首先pip安裝langchain和dashscope pip install langchain pip install langchain_community pip install dashscope --upgrade然后測試一下運行效果 from langchain_community.chat_models.tongyi import ChatTongyi from langchain.schema import HumanMessage #api_key可以…

如何使用C++中的內聯函數和編譯器優化

在C中&#xff0c;內聯函數&#xff08;inline functions&#xff09;是一種請求編譯器嘗試在調用點將函數體展開&#xff0c;而不是按照常規函數調用的方式&#xff08;即產生調用指令、保存寄存器、棧幀操作等&#xff09;來執行的特殊函數。內聯函數主要用于小的、頻繁調用的…

CentOS命令格式及常用命令

在CentOS中&#xff0c;系統目錄結構遵循了標準的Linux文件系統層次結構&#xff08;Filesystem Hierarchy Standard&#xff0c;FHS&#xff09;。下面是CentOS系統中一些重要的目錄及其用途的介紹&#xff1a; 1. /&#xff08;根目錄&#xff09;&#xff1a;整個文件系統的…