3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

發(fā)布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在 ASP.NET Core Web API中使用 Polly 構(gòu)建彈性容錯的微服務(wù)

https://procodeguide.com/programming/polly-in-aspnet-core/

在本文中,我們將了解如何在微服務(wù)中實(shí)現(xiàn)彈性容錯,即在 ASP.NET Core 中使用 Polly 構(gòu)建彈性微服務(wù)(Web API)。通過在微服務(wù)中實(shí)現(xiàn)容錯,我們確保在其中一項服務(wù)發(fā)生任何故障時,整個系統(tǒng)不會受到影響。

在本文中,我不會介紹如何在 ASP.NET Core 中構(gòu)建微服務(wù),因為我已經(jīng)在我的另一篇關(guān)于使用 ASP.NET Core[1]的微服務(wù)的文章中詳細(xì)介紹了這一點(diǎn)。在這里,我們將看到如何在 ASP.NET Core 中使用 Polly 在微服務(wù)中實(shí)現(xiàn)容錯。

無論您是在處理微服務(wù)還是單體應(yīng)用程序,很有可能需要調(diào)用外部第三方或內(nèi)部 API,因此您需要以一種可以處理該 API 故障的方式構(gòu)建您的代碼作為您的應(yīng)用程序流取決于來自該 API 的響應(yīng)。

在應(yīng)用程序或彈性 Web 服務(wù)中構(gòu)建彈性意味著我們需要確保 Web 服務(wù)始終可用且具有可接受的功能,即使在服務(wù)高負(fù)載、網(wǎng)絡(luò)故障、我們的服務(wù)所依賴的其他服務(wù)出現(xiàn)故障等情況下,等等。

ASP.NET Core 中的 Polly

目錄

什么是 Polly,我們?yōu)槭裁葱枰?#xff1f;

處理部分故障的設(shè)計原則

Polly 支持的彈性策略

重試

斷路器

超時

Bulkhead(隔板)

緩存

回退

策略封裝

在 ASP.NET Core 中實(shí)現(xiàn) Polly 的策略

演示的總體方法

創(chuàng)建 ASP.NET Core Web API 項目

創(chuàng)建客戶服務(wù)

創(chuàng)建訂單服務(wù)

在 ASP.NET Core 訂單服務(wù)中配置 Polly 的策略

重試策略

超時策略

回退策略

斷路器策略

Bulkhead策略

概括

下載源代碼

什么是 Polly,我們?yōu)槭裁葱枰?#xff1f;

Polly[2]是一個 .NET 彈性和瞬態(tài)故障處理庫,允許開發(fā)人員以流暢和線程安全的方式表達(dá)重試、斷路器、超時、隔板隔離和回退等策略。

如果我們說我們已經(jīng)徹底測試了我們的應(yīng)用程序并且生產(chǎn)環(huán)境中不會出現(xiàn)任何中斷,那我們就完全錯了。由于應(yīng)用程序崩潰、響應(yīng)緩慢、系統(tǒng)負(fù)載過大、硬件故障、網(wǎng)絡(luò)問題等等,將會出現(xiàn)應(yīng)用程序故障。

為了在我們的應(yīng)用程序中處理這些故障,首先我們必須承認(rèn)這些故障會發(fā)生,其次我們必須在我們的應(yīng)用程序中加入容錯,即我們確保整個系統(tǒng)不會由于一個或多個服務(wù)故障而失敗。

例如,微服務(wù)是一種設(shè)計,其中一個大型應(yīng)用程序被開發(fā)為一組具有自己的數(shù)據(jù)存儲的小型獨(dú)立服務(wù)。通過在微服務(wù)中構(gòu)建容錯,我們以這樣一種方式設(shè)計它,即一個服務(wù)的故障不會影響其他服務(wù)的工作,即如果與配置文件更新相關(guān)的服務(wù)關(guān)閉,那么用戶應(yīng)該無法更新配置文件,但其他事務(wù)如訂單輸入\查詢應(yīng)該可以正常工作。

此外,構(gòu)建彈性服務(wù)不是為了避免故障,而是關(guān)于從故障中恢復(fù)并以避免停機(jī)和數(shù)據(jù)丟失的方式執(zhí)行其功能的能力。微服務(wù)應(yīng)設(shè)計為處理部分故障。如果您不設(shè)計和實(shí)施確保容錯的技術(shù),即使是部分故障也可能被放大。

在 ASP.NET Core 中使用 Polly 只需幾行代碼,我們就可以構(gòu)建具有彈性的應(yīng)用程序,盡管在復(fù)雜的微服務(wù)或基于云的部署中發(fā)生部分故障,但仍能順利運(yùn)行。在 ASP.NET Core 中使用 Polly 在微服務(wù)中實(shí)現(xiàn)容錯后,我們確保如果服務(wù)失敗或宕機(jī),整個系統(tǒng)不會宕機(jī)。

使用 ASP.NET Core 中的 Polly 策略,我們可以設(shè)計我們的應(yīng)用程序以在出現(xiàn)故障時以指定的方式進(jìn)行響應(yīng)。

處理部分故障的設(shè)計原則

以下是推薦用于處理微服務(wù)中的部分故障的一些設(shè)計原則列表

通訊訂閱

強(qiáng)烈建議使用異步通信,而不是跨內(nèi)部微服務(wù)的長鏈同步 HTTP 調(diào)用。唯一的同步調(diào)用應(yīng)該是客戶端應(yīng)用程序和入門級微服務(wù)或 API 網(wǎng)關(guān)之間的前端調(diào)用。

可以通過在服務(wù)調(diào)用中實(shí)現(xiàn)重試來避免間歇性網(wǎng)絡(luò)或通道故障。這些重試應(yīng)該是有限的次數(shù),不能是無限的。

始終為每個網(wǎng)絡(luò)調(diào)用實(shí)現(xiàn)超時。調(diào)用客戶端不應(yīng)無休止地等待來自任何服務(wù)的響應(yīng),而應(yīng)等待預(yù)定義的時間限制,一旦該時間過去,則調(diào)用失敗。

使用斷路器模式,對失敗的服務(wù)進(jìn)行重試,如果服務(wù)仍然失敗,則在一些固定的重試之后,斷路器跳閘,以便進(jìn)一步的嘗試立即失敗,即不會對失敗的服務(wù)進(jìn)行新的調(diào)用,而不是它將假定其失敗或已關(guān)閉。有一個時間限制,不會對失敗的服務(wù)進(jìn)行新的調(diào)用,一旦時間過去,新的調(diào)用將轉(zhuǎn)到失敗的服務(wù)以驗證服務(wù)是否再次啟動和運(yùn)行。如果新請求成功,則斷路器將關(guān)閉,請求將轉(zhuǎn)發(fā)到服務(wù)。

為失敗的服務(wù)提供一些回退或默認(rèn)行為,即如果服務(wù)請求失敗,則提供一些回退邏輯,如返回緩存數(shù)據(jù)或默認(rèn)數(shù)據(jù)。這可以解決難以實(shí)現(xiàn)插入和更新的查詢。

對于調(diào)用(客戶端)的兩個微服務(wù)之間的通信,微服務(wù)應(yīng)該對來自特定服務(wù)的待處理請求數(shù)量實(shí)施一些限制,即如果已達(dá)到限制,則向同一服務(wù)發(fā)送額外請求可能毫無意義,而是其他請求應(yīng)立即失敗。

Polly 支持的彈性策略

這是 Polly 在 ASP.NET Core 中支持的彈性策略列表:

重試

ASP.NET Core ?Polly 的這個策略允許我們在調(diào)用服務(wù)時配置自動重試。

假設(shè)我們有一個訂單服務(wù),它調(diào)用產(chǎn)品服務(wù)來獲取所訂購商品的詳細(xì)信息。現(xiàn)在,如果產(chǎn)品服務(wù)具有大部分時間有效但有時會失敗的隨機(jī)行為。

現(xiàn)在在這種情況下,如果訂單服務(wù)收到來自產(chǎn)品服務(wù)的失敗響應(yīng),那么重試請求可能會從產(chǎn)品服務(wù)中獲取結(jié)果。

Polly 幫助我們實(shí)現(xiàn)了這個重試策略,限制了從訂單服務(wù)到產(chǎn)品服務(wù)的最大重試次數(shù)。

斷路器

當(dāng)服務(wù)請求失敗計數(shù)超過某個預(yù)先配置的閾值時,ASP.NET Core 中的 Polly 策略幫助我們打破鏈路,即在配置的時間段內(nèi)阻止服務(wù)請求的執(zhí)行。

我們將采用相同的訂單服務(wù)示例,向產(chǎn)品服務(wù)請求商品詳細(xì)信息。現(xiàn)在假設(shè)從訂單服務(wù)到產(chǎn)品服務(wù)的請求即使在重試時也不斷失敗,那么在這種情況下,我們阻止調(diào)用產(chǎn)品服務(wù)并提供緩存或默認(rèn)數(shù)據(jù)。

這種在服務(wù)失敗達(dá)到配置次數(shù)時不調(diào)用服務(wù)并依靠回退機(jī)制的設(shè)計稱為斷路器。當(dāng)訂單服務(wù)成功連續(xù)調(diào)用產(chǎn)品服務(wù)時,我們說鏈路關(guān)閉(關(guān)閉狀態(tài))。但是當(dāng)訂單服務(wù)不調(diào)用產(chǎn)品服務(wù)并依賴回退機(jī)制時,在這種情況下,我們說鏈路是開放的(開放狀態(tài)

超時

ASP.NET Core 中 Polly 的這個策略允許我們在對另一個服務(wù)的 HTTP 請求期間實(shí)現(xiàn)超時,以確保調(diào)用者服務(wù)不必等待超時。

當(dāng)訂單服務(wù)調(diào)用產(chǎn)品服務(wù)獲取商品詳細(xì)信息時,如果產(chǎn)品服務(wù)的響應(yīng)延遲(產(chǎn)品服務(wù)可能正在等待來自慢速/掛起數(shù)據(jù)庫的響應(yīng)),那么訂單服務(wù)會假設(shè)產(chǎn)品服務(wù)在超時時間之外不太可能成功。因此,超出超時期限的訂單服務(wù)假定產(chǎn)品服務(wù)存在問題,它將停止等待產(chǎn)品服務(wù)的響應(yīng)并采取適當(dāng)?shù)拇胧?/p>

隔板隔離

ASP.NET Core 中的 Polly 策略允許我們限制應(yīng)用程序的任何部分可以消耗的資源總量,這樣應(yīng)用程序的失敗部分就不會導(dǎo)致級聯(lián)故障也導(dǎo)致應(yīng)用程序的其他部分癱瘓。

當(dāng)訂單服務(wù)調(diào)用產(chǎn)品服務(wù)以獲取商品詳細(xì)信息時,如果由于某些原因?qū)е庐a(chǎn)品服務(wù)不可用,那么請求將開始備份訂單服務(wù),并可能導(dǎo)致訂單服務(wù)性能下降甚至導(dǎo)致訂單服務(wù)崩潰。

Bulkhead Isolation 有助于隔離部分應(yīng)用程序并控制內(nèi)存、CPU、套接字、線程等的使用,以便如果您的應(yīng)用程序的某一部分工作不順利,此策略將防止該部分影響或停止整個應(yīng)用程序。

它還允許您指定可以執(zhí)行的并發(fā)請求數(shù)量以及可以排隊執(zhí)行的請求數(shù)量,以便一旦并發(fā)和隊列插槽已滿,新請求將立即失敗。

緩存

ASP.NET Core 中 Polly 中的此策略允許在第一次檢索響應(yīng)時自動將響應(yīng)存儲在緩存中(在內(nèi)存或分布式緩存中),以便可以從緩存中返回對同一資源的后續(xù)請求。

當(dāng)訂單服務(wù)為商品詳情調(diào)用產(chǎn)品服務(wù)時,訂單服務(wù)可以將商品詳情存儲在緩存中,以便可以從緩存中獲取相同產(chǎn)品的下一個請求,而不是再次調(diào)用產(chǎn)品服務(wù)對于相同的產(chǎn)品。

回退

ASP.NET Core 中 Polly 中的此策略允許我們提供替代路徑,即可以返回的值或可以采取的操作,以防被調(diào)用的服務(wù)關(guān)閉,即返回錯誤或發(fā)生超時。

當(dāng)訂單服務(wù)調(diào)用產(chǎn)品服務(wù)以獲取商品詳細(xì)信息時,如果對產(chǎn)品服務(wù)的請求失敗,則配置的回退將允許訂單服務(wù)決定在產(chǎn)品服務(wù)失敗的情況下如何處理。訂單服務(wù)可以返回默認(rèn)數(shù)據(jù)或根據(jù)失敗采取一些行動。

無論您重試多少次,都必然會發(fā)生故障,因此您需要計劃在發(fā)生故障時應(yīng)該做什么。回退通常與重試、斷路器等其他策略結(jié)合使用。

封裝策略( Policy Wrap)

ASP.NET Core 中 Polly 中的此策略允許靈活組合 Polly 中支持的任何策略,從而能夠組合彈性策略。會有不同類型的故障需要不同的策略,我們可以根據(jù)故障類型應(yīng)用策略組合。

簡而言之,當(dāng)您想同時使用多個策略時,請使用 Policy Wrap。

現(xiàn)在讓我們看看如何在 ASP.NET Core 中實(shí)現(xiàn) Polly 支持的這些策略。

在 ASP.NET Core 中實(shí)現(xiàn) Polly 的策略

演示的總體方法

以下是此演示所采用的完整方法的詳細(xì)信息

1.我們將為客戶微服務(wù)創(chuàng)建第一個 ASP.NET Core Web API 項目,該項目包含一個 Get 操作方法以返回給定客戶代碼的客戶名稱2.我們將為訂單微服務(wù)添加第二個 ASP.NET Core Web API 項目,該項目包含一個 Get 操作方法來返回客戶的訂單詳細(xì)信息。3.除了訂單詳細(xì)信息,此訂單服務(wù)還返回客戶名稱。要獲取此客戶名稱訂單服務(wù),請調(diào)用客戶服務(wù) get 方法。4.我們已經(jīng)實(shí)現(xiàn)了這個從訂單服務(wù)到客戶服務(wù)的 HTTP 調(diào)用來獲取客戶名稱。5.我們將在向客戶服務(wù)發(fā)出 HTTP 請求的同時,在訂單服務(wù)中實(shí)施和測試各種 Polly 策略。6.我們將模擬客戶服務(wù)的故障,并了解如何通過使用 ASP.NET Core 中的 Polly 策略讓我們的訂單服務(wù)容錯。讓我們首先創(chuàng)建所需的 ASP.NET Core Web API 類型的項目,該項目將用于演示如何在 ASP.NET Core 中使用 Polly 的策略

創(chuàng)建 ASP.NET Core Web API 項目

為了演示 Polly 策略在 ASP.NET Core 中的實(shí)現(xiàn),我們將創(chuàng)建幾個 ASP.NET Core Web API 項目并按照下面指定的詳細(xì)信息配置它們。

創(chuàng)建客戶服務(wù)

創(chuàng)建一個名為 ProCodeGuide.Polly.Customer 的 ASP.NET Core Web API 類型的新項目

創(chuàng)建項目后,默認(rèn)的 WeatherForecast 控制器已被刪除,因為演示不需要它。

添加客戶控制器

我們需要添加一個 Customer 控制器,該控制器將有一個 get 操作方法,該方法根據(jù)輸入的客戶代碼返回客戶名稱。我們將添加 Controllers\CustomerController.cs 如下所示

[Route("api/[controller]")] [ApiController] public class CustomerController : ControllerBase {private Dictionary<int, string> _customerNameDict = null;public CustomerController(){if(_customerNameDict == null){_customerNameDict = new Dictionary<int, string>();_customerNameDict.Add(1, "Pro Code Guide");_customerNameDict.Add(2, "Support - Pro Code Guide");_customerNameDict.Add(3, "Sanjay");_customerNameDict.Add(4, "Sanjay - Pro Code Guide");}}[HttpGet][Route("GetCustomerName/{customerCode}")]public ActionResult<string> GetCustomerName(int customerCode){if (_customerNameDict != null && _customerNameDict.ContainsKey(customerCode)){return _customerNameDict[customerCode];}return "Customer Not Found";} }

出于演示目的,我在控制器本身中硬編碼了客戶代碼和名稱列表,但理想情況下,這些數(shù)據(jù)應(yīng)該來自使用實(shí)體框架的數(shù)據(jù)庫。

運(yùn)行并測試客戶服務(wù)

從 Visual Studio 構(gòu)建和運(yùn)行應(yīng)用程序后,您應(yīng)該會從 swagger (OpenAPI) 看到以下屏幕。

在執(zhí)行獲取操作 /api/Customer/GetCustomerName/2 時,您應(yīng)該從操作方法中獲得以下響應(yīng)。

創(chuàng)建訂單服務(wù)

在同一個解決方案中創(chuàng)建 ASP.NET Core Web API 類型的第二個項目,名稱為 ProCodeGuide.Polly.Order


創(chuàng)建 ASP.NET Core Web API 訂單

創(chuàng)建項目后,默認(rèn)的 WeatherForecast 控制器已被刪除,因為演示不需要它。

添加模型

首先在 Models\Item.cs & Models\OrderDetails.cs 中添加 Order details 所需的模型,如下所示

public class Item {public int Id { get; set; }public string Name { get; set; } } public class OrderDetails {public int Id { get; set; }public string CustomerName { get; set; }public DateTime SetupDate { get; set; }public List<Item> Items { get; set; } }

添加訂單控制器

我們需要添加一個 Order 控制器,它將有一個 get action 方法,該方法根據(jù)輸入的客戶代碼返回詳細(xì)的訂單。此方法還將對客戶服務(wù)進(jìn)行 HTTP 調(diào)用以獲取客戶代碼的客戶名稱。

讓我們首先在依賴容器中添加 httpclient 服務(wù),以便我們可以在訂單控制器中獲取該對象 httpclient 以對客戶服務(wù)進(jìn)行 HTTP 調(diào)用。要在依賴容器中添加 httpclient 服務(wù),請將以下行添加到 Startup.cs 中的 ConfigureServices 方法

services.AddHttpClient();

我們將添加 Controllers\OrderController.cs 如下所示

[Route("api/[controller]")] [ApiController] public class OrderController : ControllerBase {private readonly ILogger<OrderController> _logger;private readonly IHttpClientFactory _httpClientFactory;private HttpClient _httpClient;private string apiurl = @"http://localhost:23833/";private OrderDetails _orderDetails = null;public OrderController(ILogger<OrderController> logger, IHttpClientFactory httpClientFactory){_logger = logger;_httpClientFactory = httpClientFactory;if (_orderDetails == null){_orderDetails = new OrderDetails{Id = 7261,SetupDate = DateTime.Now.AddDays(-10),Items = new List<Item>()};_orderDetails.Items.Add(new Item{Id = 6514,Name = ".NET Core Book"});}}[HttpGet][Route("GetOrderByCustomer/{customerCode}")]public OrderDetails GetOrderByCustomer(int customerCode){_httpClient = _httpClientFactory.CreateClient();_httpClient.BaseAddress = new Uri(apiurl);var uri = "/api/Customer/GetCustomerName/" + customerCode;var result = _httpClient.GetStringAsync(uri).Result;_orderDetails.CustomerName = result;return _orderDetails;} }

apiurl?– 是客戶服務(wù)的 URL(主機(jī)和端口號)

出于演示目的,我對訂單詳細(xì)信息進(jìn)行了硬編碼,即所有客戶的相同訂單詳細(xì)信息,但理想情況下,這些數(shù)據(jù)應(yīng)該來自使用實(shí)體框架的數(shù)據(jù)庫。

使用 Serilog 啟用文件日志記錄

接下來檢查添加 Polly 策略后代碼的行為,我們將添加對 Serilog 日志記錄的支持以記錄到代碼中的文件。

使用包管理器控制臺將以下包安裝到項目中

Install-Package Serilog.AspNetCore Install-Package Serilog.Settings.Configuration Install-Package Serilog.Sinks.File

將 Serilog 的配置添加到 appsettings.json 文件中,如下所示

"Serilog": {"MinimumLevel": "Information","Override": {"Microsoft.AspNetCore": "Information"},"WriteTo": [{"Name": "File","Args": {"path": "Serilogs\\AppLogs.log"}}] }

在 Program.cs 文件中的 CreateHostBuilder 方法中配置 Serilog,如下代碼所示

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).UseSerilog().ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});

在 Startup.cs 文件中的 Startup Constructor 中配置 Serilog,如下代碼所示

public Startup(IConfiguration configuration) {Configuration = configuration;Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger(); }

以上配置會生成日志到路徑{Project Path}\Serilogs\AppLogs.log下的文件

如果您想進(jìn)一步詳細(xì)了解如何將 Serilog 日志添加到項目中,那么您可以在此處[3]查看我的詳細(xì)文章

現(xiàn)在我們已經(jīng)添加了所需的項目并配置了項目,讓我們運(yùn)行并檢查項目。由于此訂單服務(wù)依賴于客戶服務(wù),因此我們需要確保在測試時兩個項目都已啟動并正在運(yùn)行。為了從 Visual Studio 一起啟動這兩個項目,我們將對啟動項目進(jìn)行更改。

右鍵單擊解決方案資源管理器中的解決方案文件,然后選擇將加載屬性屏幕的屬性,您可以通過選擇多個啟動項目選項來配置以同時啟動兩個項目,如下所示

現(xiàn)在,當(dāng)您從 Visual Studio 運(yùn)行項目時,訂單和客戶服務(wù)項目都將啟動。

運(yùn)行并測試訂單服務(wù)

從 Visual Studio 構(gòu)建和運(yùn)行應(yīng)用程序后,您應(yīng)該會從 swagger (OpenAPI) 看到以下屏幕。

在執(zhí)行獲取操作 /api/Order/GetOrderByCustomer/2 時,您應(yīng)該從操作方法中獲得以下響應(yīng)。

現(xiàn)在讓我們看看當(dāng)客戶服務(wù)不可用時會發(fā)生什么,即訂單服務(wù)沒有問題但客戶服務(wù)沒有啟動和運(yùn)行。為了模擬這種情況,我剛剛啟動了 Order 服務(wù),但沒有啟動客戶服務(wù),因此客戶服務(wù)沒有啟動和運(yùn)行。

正如我們在上面看到的,當(dāng)客戶服務(wù)沒有啟動并運(yùn)行時,訂單服務(wù)也會開始拋出錯誤。從 Serilog 中,您將能夠看到訂單服務(wù)向客戶服務(wù)發(fā)出請求,該請求返回了異常,因此在級聯(lián)效果中,訂單服務(wù)也返回了 500

讓我們探討如何使用 ASP.NET Core 中的 Polly 策略來避免這種行為

在 ASP.NET Core 訂單服務(wù)中配置 Polly 的策略

要在 ASP.NET Core 中配置 Polly 的策略,您需要在項目中安裝 Polly 包。您可以通過在包管理器控制臺窗口中運(yùn)行以下命令來添加 Polly 包

Install-Package Polly

現(xiàn)在我們在訂單服務(wù)項目中安裝了 Polly 包文件,讓我們看看如何在我們的 ASP.NET Core Web API(訂單服務(wù))項目中使用 Polly 的策略來使我們的訂單服務(wù)容錯,盡管客戶服務(wù)沒有運(yùn)行或失敗。

聲明 Polly 策略的方法不止一種,即使用注冊表或通過 Startup 添加它們。但是,為了在這篇介紹文章中保持簡單,我們將直接在構(gòu)造函數(shù)的控制器類中創(chuàng)建 Polly 策略。

重試策略

根據(jù) name 的定義,此策略建議您需要在第一次嘗試失敗的情況下重試請求。現(xiàn)在,這些重試必須是固定的次數(shù),因為這種重試業(yè)務(wù)不可能永遠(yuǎn)持續(xù)下去。此重試策略可讓您配置要進(jìn)行的重試次數(shù)。

此重試策略允許在重試之前添加延遲,或者在對失敗的服務(wù)進(jìn)行重試調(diào)用之前不要等待,因此如果您希望服務(wù)中返回錯誤的問題將立即得到糾正,那么您應(yīng)該只實(shí)現(xiàn)重試邏輯而不任何延誤。

考慮從訂單服務(wù)到客戶服務(wù)的 HTTP 請求失敗的場景。來自客戶服務(wù)的這個錯誤可能是永久性的,也可能是暫時的。要處理臨時故障,您需要添加邏輯以將請求重試至客戶服務(wù)至少 2 次,以確保使用重試處理來自客戶服務(wù)的臨時故障。

按照這個重試邏輯,訂單服務(wù)將向客戶服務(wù)請求客戶名稱,如果客戶服務(wù)返回異常,那么訂單服務(wù)仍將再向客戶服務(wù)重試請求 2 次,然后得出結(jié)論,現(xiàn)在現(xiàn)在不可能了獲得客戶服務(wù)的成功回復(fù)。

要模擬來自客戶服務(wù)的隨機(jī)故障,請將以下操作方法添加到客戶服務(wù)中。這種方法是隨機(jī)返回數(shù)據(jù)或錯誤。為了實(shí)現(xiàn)這種隨機(jī)行為,我們生成一個 1 到 10 之間的數(shù)字,如果這個生成的數(shù)字是偶數(shù),那么我們將返回一個帶有 HTTP 狀態(tài)代碼 500 的服務(wù)器錯誤,如果生成的數(shù)字不是偶數(shù),即它是奇數(shù),那么我們將返回根據(jù)客戶代碼使用客戶名稱的成功響應(yīng)。

因此,此客戶服務(wù)操作方法 GetCustomerNameWithTempFailure 將隨機(jī)運(yùn)行,即有時會返回錯誤或在某些情況下會返回成功響應(yīng)

[HttpGet] [Route("GetCustomerNameWithTempFailure/{customerCode}")] public ActionResult<string> GetCustomerNameWithTempFailure(int customerCode) {try{Random rnd = new Random();int randomError = rnd.Next(1, 11); // creates a number between 1 and 10if (randomError % 2 == 0)throw new Exception();if (_customerNameDict != null && _customerNameDict.ContainsKey(customerCode)){return _customerNameDict[customerCode];}return "Customer Not Found";}catch{//Log Errorreturn StatusCode(StatusCodes.Status500InternalServerError);} }

要在 ASP.NET Core 中使用 Polly 實(shí)現(xiàn)重試邏輯,我們需要聲明 RetryPolicy 類型的對象并定義策略,如下面的代碼所示

//Remaining Code has been removed for readabilityprivate readonly RetryPolicy _retryPolicy;public OrderController(ILogger<OrderController> logger, IHttpClientFactory httpClientFactory) {//Remaining Code has been removed for readability_retryPolicy = Policy.Handle<Exception>().Retry(2); }

上面的代碼示例將創(chuàng)建一個重試策略,如果 HTTP 服務(wù)調(diào)用失敗并且策略處理異常,該策略將重試最多兩次。在這里,我們指定了重試策略處理通用異常,因此它將重試所有類型的異常,但您甚至可以為更具體的異常(如 HttpRequestException)配置重試策略,然后它只會重試類型為 HttpRequestException 的異常。

接下來,我們將在訂單服務(wù)中添加一個新的操作方法,它將利用 RetryPolicy 對象向客戶服務(wù)的新操作方法 (GetCustomerNameWithTempFailure) 發(fā)出 HTTP 請求,該方法隨機(jī)返回錯誤。重試策略用于處理來自客戶服務(wù)的隨機(jī)故障。

[HttpGet] [Route("GetOrderByCustomerWithRetry/{customerCode}")] public OrderDetails GetOrderByCustomerWithRetry(int customerCode) {_httpClient = _httpClientFactory.CreateClient();_httpClient.BaseAddress = new Uri(apiurl);var uri = "/api/Customer/GetCustomerNameWithTempFailure/" + customerCode;var result = _retryPolicy.Execute(() => _httpClient.GetStringAsync(uri).Result);_orderDetails.CustomerName = result;return _orderDetails; }

RetryPolicy 對象使用委托在 Execute() 委托中對客戶服務(wù)執(zhí)行所需的 HTTP 調(diào)用。如果 HTTP 調(diào)用引發(fā)由重試策略處理的異常,則 HTTP 調(diào)用將重試配置的次數(shù)。

讓我們在 ASP.NET Core 中運(yùn)行和測試 Polly 的重試策略。在 Visual Studio 中運(yùn)行解決方案后,兩個項目(即客戶和訂單)都應(yīng)該啟動。兩個服務(wù)都開始轉(zhuǎn)到訂購服務(wù)后,您應(yīng)該會看到以下來自 swagger (OpenAPI) 的屏幕

在上面的屏幕上選擇操作 /api/Order/GetOrderByCustomerWithRetry/(customerCode) 它應(yīng)該展開,然后單擊 Try it out 按鈕。之后,您應(yīng)該會看到以下屏幕,您需要在其中輸入客戶代碼的值并單擊執(zhí)行按鈕。

如上所示,單擊執(zhí)行后,我們根據(jù)為客戶代碼輸入的值獲得了正確客戶名稱的成功響應(yīng)。

但是訂單服務(wù)中的 GetOrderByCustomerWithRetry 操作正在對客戶服務(wù)進(jìn)行 HTTP 調(diào)用,該調(diào)用會隨機(jī)返回錯誤,因此讓我們檢查日志,看看在客戶服務(wù)中對 GetCustomerNameWithTempFailure 的 HTTP 調(diào)用期間發(fā)生了什么

正如我們在上面日志的屏幕截圖中看到的,當(dāng)我們從訂單服務(wù)調(diào)用客戶服務(wù)時,第一次調(diào)用返回了一個錯誤,但由于我們已經(jīng)配置了重試策略并且它被重試,并且在第一次重試時客戶服務(wù)返回成功響應(yīng)并帶有正確的客戶名稱根據(jù)客戶代碼的價值。因此,通過在訂單服務(wù)中使用重試策略,我們能夠處理客戶服務(wù)中的臨時故障。

超時策略

根據(jù) name 的定義,此策略建議您需要在設(shè)置的時間限制內(nèi)沒有來自其他服務(wù)的響應(yīng)的情況下終止請求。

考慮從訂單服務(wù)到客戶服務(wù)的 HTTP 請求被延遲的場景。來自客戶服務(wù)的此錯誤可能永無止境,因為客戶服務(wù)可能正在等待來自慢速/掛起數(shù)據(jù)庫的響應(yīng)或來自第三方服務(wù)的響應(yīng),并且客戶服務(wù)尚未為這些調(diào)用實(shí)現(xiàn)超時。

要處理延遲響應(yīng),您需要添加邏輯以在設(shè)定的時間限制過后對客戶服務(wù)的請求超時,以確保訂單服務(wù)不會無休止地等待客戶服務(wù)的響應(yīng),因為它會使線程永遠(yuǎn)忙碌。這種無休止的等待也會對訂單服務(wù)產(chǎn)生級聯(lián)效應(yīng),并可能耗盡訂單服務(wù)服務(wù)器上的所有可用資源。

按照這個超時邏輯,訂單服務(wù)會向客服請求客戶名稱,如果客服在設(shè)定的時限內(nèi)沒有得到響應(yīng),那么訂單服務(wù)假設(shè)現(xiàn)在沒有機(jī)會得到客戶的成功響應(yīng)服務(wù),因此它終止或超時請求并采取適當(dāng)?shù)男袆硬⒎祷仨憫?yīng)。

要模擬客戶服務(wù)響應(yīng)的延遲,請將以下操作方法添加到客戶服務(wù)中。此方法在 2 分鐘延遲后返回響應(yīng)。為了實(shí)現(xiàn)這種行為,我們使用了 Thread 類中的 sleep 方法,該方法在指定的時間內(nèi)停止線程執(zhí)行。

所以這個客戶服務(wù)操作方法 GetCustomerNameWithDelay 將延遲響應(yīng) 2 分鐘以訂購服務(wù)。

[HttpGet] [Route("GetCustomerNameWithDelay/{customerCode}")] public ActionResult<string> GetCustomerNameWithDelay(int customerCode) {Thread.Sleep(new TimeSpan(0, 2, 0));if (_customerNameDict != null && _customerNameDict.ContainsKey(customerCode)){return _customerNameDict[customerCode];}return "Customer Not Found"; }

要在 ASP.NET Core 中使用 Polly 實(shí)現(xiàn)超時邏輯,我們需要聲明 TimeoutPolicy 類型的對象并定義策略,如下面的代碼所示

private static TimeoutPolicy _timeoutPolicy;public OrderController(ILogger<OrderController> logger, IHttpClientFactory httpClientFactory) {_timeoutPolicy = Policy.Timeout(20, TimeoutStrategy.Pessimistic); }

上面的代碼示例將創(chuàng)建一個超時策略,該策略將等待響應(yīng) 20 秒,在 20 秒后,它將假定不可能成功響應(yīng)并且將超時請求,即應(yīng)放棄執(zhí)行委托或函數(shù)。

ASP.NET Core 中 Polly 中的超時策略支持樂觀和悲觀超時。建議盡可能使用樂觀超時,因為它消耗的資源較少。

樂觀 - 假設(shè)您執(zhí)行的委托支持取消,并且委托通過拋出異常來表達(dá)該超時

悲觀 - 認(rèn)識到在某些情況下您可能需要執(zhí)行沒有內(nèi)置超時的委托,并且不接受取消,即調(diào)用者停止等待底層委托完成

接下來,我們將在訂單服務(wù)中添加一個新的操作方法,它將使用 TimeoutPolicy 對象向客戶服務(wù)的新操作方法 (GetCustomerNameWithDelay) 發(fā)出 HTTP 請求,該方法返回延遲響應(yīng)。超時策略用于處理來自客戶服務(wù)的延遲。

[HttpGet] [Route("GetOrderByCustomerWithTimeout/{customerCode}")] public OrderDetails GetOrderByCustomerWithTimeout(int customerCode) {try{_httpClient = _httpClientFactory.CreateClient();_httpClient.BaseAddress = new Uri(apiurl);var uri = "/api/Customer/GetCustomerNameWithDelay/" + customerCode;var result = _timeoutPolicy.Execute(() => _httpClient.GetStringAsync(uri).Result);_orderDetails.CustomerName = result;return _orderDetails;}catch(Exception ex){_logger.LogError(ex, "Excpetion Occurred");_orderDetails.CustomerName = "Customer Name Not Available as of Now";return _orderDetails;} }

TimeoutPolicy 對象使用委托在 Execute() 委托中對客戶服務(wù)執(zhí)行所需的 HTTP 調(diào)用。如果 HTTP 調(diào)用在 20 秒內(nèi)沒有返回響應(yīng),即根據(jù)超時策略中設(shè)置的時間,則 HTTP 調(diào)用將終止并引發(fā)超時 – operationcancelledexception 和在 catch 塊中,我們已將客戶名稱設(shè)置為 '客戶名稱目前不可用'。這僅用于演示目的,在實(shí)踐中您將向用戶返回錯誤,同時將錯誤通知管理員,以便修復(fù)。

讓我們在 ASP.NET Core 中運(yùn)行和測試 Polly 的超時策略。在 Visual Studio 中運(yùn)行解決方案后,兩個項目(即客戶和訂單)都應(yīng)該啟動。兩個服務(wù)都開始轉(zhuǎn)到訂購服務(wù)后,您應(yīng)該會看到以下來自 swagger (OpenAPI) 的屏幕

在上面的屏幕上選擇操作 /api/Order/GetOrderByCustomerWithTimeout/(customerCode) 它應(yīng)該展開,然后單擊 Try it out 按鈕。之后,您應(yīng)該會看到以下屏幕,您需要在其中輸入客戶代碼的值并單擊執(zhí)行按鈕。

如上所示,點(diǎn)擊執(zhí)行后,根據(jù)我們對超時事件的處理,我們得到了客戶名稱為“客戶名稱截至目前不可用”的成功響應(yīng)。

但是訂單服務(wù)中的 GetOrderByCustomerWithTimeout 操作正在對客戶服務(wù)進(jìn)行 HTTP 調(diào)用,該調(diào)用返回延遲響應(yīng),因此讓我們檢查日志,看看在客戶服務(wù)中對 GetCustomerNameWithDelay 的 HTTP 調(diào)用期間發(fā)生了什么

正如我們在上面的日志截圖中看到的那樣,當(dāng)我們從訂單服務(wù)調(diào)用客戶服務(wù)時,由于訂單服務(wù)超時策略引發(fā)的超時事件導(dǎo)致客戶服務(wù)響應(yīng)延遲,Polly.Timeout.TimeoutRejectedException 類型的異常是引發(fā)并取消操作。在 catch 塊中,我們添加了返回成功的代碼,但具有自定義客戶名稱。因此,通過在訂單服務(wù)中使用超時策略,我們能夠處理客戶服務(wù)的延遲并避免無休止地等待訂單服務(wù)。

回退策略

根據(jù) name 的定義,此策略表明您需要在調(diào)用請求失敗的情況下進(jìn)行一些后備(計劃 B)。現(xiàn)在,在這里您可以首先實(shí)施重試策略以排除正在調(diào)用的服務(wù)的臨時故障,在所有重試服務(wù)也失敗之后,您可以有一些后備機(jī)制,即在失敗的情況下該怎么做。此回退策略允許您在被調(diào)用的服務(wù)失敗時為響應(yīng)提供替代值(或要執(zhí)行的替代操作)。

考慮從訂單服務(wù)到客戶服務(wù)的 HTTP 請求失敗的場景。來自客戶服務(wù)的這個錯誤可能是永久性的,也可能是暫時的。現(xiàn)在即使在重試過程中請求也失敗了,所以不要因為客戶服務(wù)失敗而導(dǎo)致訂單服務(wù)失敗,而是希望為響應(yīng)提供一些替代值,以便訂單服務(wù)可以將其作為響應(yīng)(而不是失敗)和根據(jù)該響應(yīng)執(zhí)行剩余的代碼。

根據(jù)此回退邏輯,訂單服務(wù)將向客戶服務(wù)請求客戶名稱,如果客戶服務(wù)返回異常,則訂單服務(wù)將使用回退策略中配置的替代值作為來自客戶服務(wù)的最終響應(yīng)并處理該響應(yīng)。

要模擬客戶服務(wù)中的永久性故障,請將以下操作方法添加到客戶服務(wù)中。此方法始終返回錯誤。

所以這個客戶服務(wù)操作方法 GetCustomerNameWithPermFailure 將拋出異常并且在所有情況下總是返回錯誤

[HttpGet] [Route("GetCustomerNameWithPermFailure/{customerCode}")] public ActionResult<string> GetCustomerNameWithPermFailure(int customerCode) {try{throw new Exception("Database Not Available");}catch{//Log Errorreturn StatusCode(StatusCodes.Status500InternalServerError);} }

要在 ASP.NET Core 中使用 Polly 實(shí)現(xiàn)回退邏輯,我們需要聲明 FallbackPolicy 類型的對象并定義策略,如下面的代碼所示

private readonly FallbackPolicy<string> _fallbackPolicy;public OrderController(ILogger<OrderController> logger, IHttpClientFactory httpClientFactory) {_fallbackPolicy = Policy<string>.Handle<Exception>().Fallback("Customer Name Not Available - Please retry later"); }

上面的代碼示例將創(chuàng)建一個回退策略,如果 HTTP 服務(wù)調(diào)用因策略處理的異常而失敗,則會將響應(yīng)值替換為“客戶名稱不可用 - 請稍后重試”。數(shù)據(jù)類型為字符串 (TResult) 的回退策略被用作客戶服務(wù)操作,返回字符串(客戶名稱)作為響應(yīng)。

您甚至可以將回退策略用于返回?zé)o效的調(diào)用。在 void 的情況下,如果策略處理錯誤(而不是替代返回值),它指定要運(yùn)行的備用操作.Fallback(() => DoSomeFallbackAction())

同樣在上面的代碼中,我們已經(jīng)指定回退策略處理通用異常,因此它將為所有類型的異常提供替代值,但您甚至可以為更具體的異常(如 HttpRequestException)配置回退策略,然后它將僅為HttpRequestException 類型的異常。

接下來,我們將在訂單服務(wù)中添加一個新的操作方法,該方法將使用 FallbackPolicy 對象向返回錯誤的客戶服務(wù)的新操作方法 (GetCustomerNameWithPermFailure) 發(fā)出 HTTP 請求。回退策略用于通過在發(fā)生故障時為響應(yīng)提供回退或替代值來處理客戶服務(wù)失敗。

[HttpGet] [Route("GetOrderByCustomerWithFallback/{customerCode}")] public OrderDetails GetOrderByCustomerWithFallback(int customerCode) {_httpClient = _httpClientFactory.CreateClient();_httpClient.BaseAddress = new Uri(apiurl);var uri = "/api/Customer/GetCustomerNameWithPermFailure/" + customerCode;var result = _fallbackPolicy.Execute(() => _httpClient.GetStringAsync(uri).Result);![](https://img2020.cnblogs.com/blog/191302/202110/191302-20211025232132690-134030604.png)_orderDetails.CustomerName = result;return _orderDetails; }

FallbackPolicy 對象使用委托在 Execute() 委托中對客戶服務(wù)執(zhí)行所需的 HTTP 調(diào)用。如果 HTTP 調(diào)用引發(fā)了由回退策略處理的異常,則在失敗時提供替代值。

讓我們在 ASP.NET Core 中運(yùn)行和測試 Polly 的回退策略。在 Visual Studio 中運(yùn)行解決方案后,兩個項目(即客戶和訂單)都應(yīng)該啟動。兩個服務(wù)都開始轉(zhuǎn)到訂購服務(wù)后,您應(yīng)該會看到以下來自 swagger (OpenAPI) 的屏幕

在上面的屏幕上選擇操作 /api/Order/GetOrderByCustomerWithFallback/(customerCode) 它應(yīng)該展開,然后單擊 Try it out 按鈕。之后,您應(yīng)該會看到以下屏幕,您需要在其中輸入客戶代碼的值并單擊執(zhí)行按鈕。

如上所示,點(diǎn)擊執(zhí)行后,我們得到了一個成功的響應(yīng)(即使客戶服務(wù)永久失敗),客戶名稱根據(jù)為客戶代碼配置的后備替代值。

但是訂單服務(wù)中的 GetOrderByCustomerWithFallback 操作正在對客戶服務(wù)進(jìn)行 HTTP 調(diào)用,該調(diào)用返回錯誤,因此讓我們檢查日志,看看在客戶服務(wù)中對 GetCustomerNameWithPermFailure 的 HTTP 調(diào)用期間發(fā)生了什么。

正如我們在上面日志的屏幕截圖中看到的,當(dāng)我們從訂單服務(wù)調(diào)用客戶服務(wù)并返回錯誤但訂單服務(wù)仍然成功并且回退值用于響應(yīng)。因此,通過在訂單服務(wù)中使用回退策略,我們能夠處理客戶服務(wù)中的故障。

斷路器策略

此斷路器策略建議您需要有某種機(jī)制或邏輯來不調(diào)用特定服務(wù),以防該服務(wù)因前幾個請求而永久失敗。當(dāng)服務(wù)請求失敗計數(shù)超過某個預(yù)先配置的閾值時,此斷路器策略允許您配置為在配置的時間段內(nèi)阻止對特定失敗服務(wù)的 HTTP 請求。

考慮從訂單服務(wù)到客戶服務(wù)的 HTTP 請求失敗的場景。來自客戶服務(wù)的這個錯誤可能是永久性的,也可能是暫時的。現(xiàn)在即使在重試期間請求也失敗了,因此您使用回退策略為響應(yīng)提供了一些替代值。但是現(xiàn)在由于很少有連續(xù)呼叫客戶服務(wù)失敗,所以一段時間(比如幾分鐘)你不想浪費(fèi)時間打電話給客戶服務(wù)而是假設(shè)它會返回一個錯誤并使用備用響應(yīng)來處理請求訂購服務(wù)。

此邏輯假設(shè),如果服務(wù)連續(xù)失敗幾次,則該服務(wù)存在一些永久性問題,可能需要一些時間來糾正問題。因此,讓我們不要浪費(fèi)時間調(diào)用或重試失敗的服務(wù),而是采取備用回退路徑為服務(wù)提供一些時間來恢復(fù)。

按照這個斷路器邏輯,訂單服務(wù)會向客服請求客戶姓名,如果客服連續(xù)2次返回異常,則電路將斷開(即電路將打開)1分鐘,并持續(xù)1分鐘訂單服務(wù)不會打電話給客戶服務(wù),而是自己假設(shè)客戶服務(wù)會返回錯誤。

為了模擬客戶服務(wù)的永久性故障,我們將使用客戶服務(wù)中的 GetCustomerNameWithPermFailure 操作,我們用于演示回退策略。

要在 ASP.NET Core 中使用 Polly 實(shí)現(xiàn)斷路器邏輯,我們需要聲明 CircuitBreakerPolicy 類型的對象并定義策略,如下面的代碼所示

private static CircuitBreakerPolicy _circuitBreakerPolicy;public OrderController(ILogger<OrderController> logger, IHttpClientFactory httpClientFactory) {if (_circuitBreakerPolicy == null){_circuitBreakerPolicy = Policy.Handle<Exception>().CircuitBreaker(2, TimeSpan.FromMinutes(1));} }

上面的代碼示例將創(chuàng)建一個斷路器策略,該策略定義在調(diào)用服務(wù)時如果連續(xù) 2 次出現(xiàn)異常,則電路將中斷(對服務(wù)的調(diào)用將被阻止)2 分鐘的時間跨度。

同樣在上面的代碼中,我們已經(jīng)指定斷路器策略處理通用異常,因此它會因所有類型的異常而中斷,但您甚至可以為更具體的異常(如 HttpRequestException)配置斷路器策略,然后它只會因以下異常而中斷類型 HttpRequestException。

接下來,我們將在訂單服務(wù)中添加一個新的操作方法,它將利用斷路器策略對象向客戶服務(wù)的操作方法 (GetCustomerNameWithPermFailure) 發(fā)出 HTTP 請求,該方法返回錯誤。斷路器策略用于處理客戶服務(wù)的故障,在客戶服務(wù)連續(xù) 2 次失敗后 1 分鐘內(nèi)不撥打任何電話。

[HttpGet] [Route("GetOrderByCustomerWithCircuitBreaker/{customerCode}")] public OrderDetails GetOrderByCustomerWithCircuitBreaker(int customerCode) {try{_httpClient = _httpClientFactory.CreateClient();_httpClient.BaseAddress = new Uri(apiurl);var uri = "/api/Customer/GetCustomerNameWithPermFailure/" + customerCode;var result = _circuitBreakerPolicy.Execute(() => _httpClient.GetStringAsync(uri).Result);_orderDetails.CustomerName = result;return _orderDetails;}catch (Exception ex){_logger.LogError(ex, "Excpetion Occurred");_orderDetails.CustomerName = "Customer Name Not Available as of Now";return _orderDetails;} }

斷路器策略對象使用委托在 Execute() 委托中執(zhí)行所需的對客戶服務(wù)的 HTTP 調(diào)用。如果 HTTP 調(diào)用引發(fā)異常,該異常正在由 catch 塊處理以提供客戶名稱的替代值。

讓我們在 ASP.NET Core 中運(yùn)行和測試 Polly 的斷路器策略。在 Visual Studio 中運(yùn)行解決方案后,兩個項目(即客戶和訂單)都應(yīng)該啟動。兩個服務(wù)都開始轉(zhuǎn)到訂購服務(wù)后,您應(yīng)該會看到以下來自 swagger (OpenAPI) 的屏幕

在上面的屏幕上選擇操作 /api/Order/GetOrderByCustomerWithCircuitBreaker/(customerCode) 它應(yīng)該展開,然后單擊 Try it out 按鈕。之后,您應(yīng)該會看到以下屏幕,您需要在其中輸入客戶代碼的值并單擊執(zhí)行按鈕。

如上所示,點(diǎn)擊執(zhí)行后,我們得到了一個成功的響應(yīng)(即使客戶服務(wù)永久失敗),客戶名稱與 catch 塊中配置的回退值一致。

但是訂單服務(wù)中的 GetOrderByCustomerWithCircuitBreaker 操作正在對客戶服務(wù)進(jìn)行 HTTP 調(diào)用,該調(diào)用返回錯誤,因此讓我們檢查日志,看看在客戶服務(wù)中對 GetCustomerNameWithPermFailure 進(jìn)行 HTTP 調(diào)用期間發(fā)生了什么

Polly 與斷路器策略

正如我們在上面日志的屏幕截圖中看到的那樣,當(dāng)我們從訂單服務(wù)調(diào)用客戶服務(wù)時,它返回了一個錯誤,訂單服務(wù)使用了來自 catch 塊的客戶名稱的替代值。此外,我們可以從日志中看到,當(dāng)我們在電路打開時嘗試致電客戶服務(wù)時,Polly 沒有致電客戶服務(wù),而是為該 Policy.CircuitBreaker.BrokenCircuitException 提供了一個異常 – 電路現(xiàn)在已打開并且不允許通話。

Bulkhead策略

要在 ASP.NET Core 中使用 Polly 實(shí)現(xiàn)艙壁隔離邏輯,我們需要聲明 BulkheadPolicy 類型的對象并定義策略,如下面的代碼所示

private static BulkheadPolicy _bulkheadPolicy;public OrderController(ILogger<OrderController> logger, IHttpClientFactory httpClientFactory) {_bulkheadPolicy = Policy.Bulkhead(3, 6); }

上面的代碼示例將創(chuàng)建一個Bulkhead策略,該策略定義在調(diào)用服務(wù)時限制調(diào)用服務(wù)的資源數(shù)量,即通過隔板的最多 3 個并行執(zhí)行和最多 6 個可能正在排隊的請求數(shù)(等待獲取執(zhí)行槽)隨時。

接下來,我們將在 order 服務(wù)中添加一個新的 action 方法,它將使用 Bulkhead Isolation Policy 對象向客戶服務(wù)的 action 方法 (GetCustomerName) 發(fā)出 HTTP 請求。隔板隔離策略用于限制用于調(diào)用客戶服務(wù)的資源,即在任何給定時間將有 3 個并行請求執(zhí)行,另外 6 個請求可以在隊列中。這樣如果客戶服務(wù)的響應(yīng)被延遲或阻塞,那么我們不會在訂單服務(wù)上使用太多資源,也會導(dǎo)致訂單服務(wù)發(fā)生級聯(lián)故障。

[HttpGet] [Route("GetOrderByCustomerWithBulkHead/{customerCode}")] public OrderDetails GetOrderByCustomerWithBulkHead(int customerCode) {_httpClient = _httpClientFactory.CreateClient();_httpClient.BaseAddress = new Uri(apiurl);var uri = "/api/Customer/GetCustomerName/" + customerCode;var result = _bulkheadPolicy.Execute(() => _httpClient.GetStringAsync(uri).Result);_orderDetails.CustomerName = result;return _orderDetails; }

隔板隔離策略對象使用委托在 Execute() 委托中執(zhí)行所需的對客戶服務(wù)的 HTTP 調(diào)用。

隔板隔離策略適用于一個錯誤不應(yīng)導(dǎo)致整艘船癱瘓的策略!即當(dāng)服務(wù)開始失敗時,它會建立大量請求,這些請求都在并行緩慢失敗,這可能導(dǎo)致訂單服務(wù)中資源(CPU/線程/內(nèi)存)的使用,從而降低能力或?qū)е路?wù)失敗訂購服務(wù)。

對于緩存策略,我建議不要實(shí)現(xiàn)基于異常緩存數(shù)據(jù)的邏輯,而是根據(jù)數(shù)據(jù)設(shè)計緩存邏輯,即靜態(tài)/動態(tài)數(shù)據(jù)、常用數(shù)據(jù)等。您可以閱讀我關(guān)于在 ASP 中緩存的詳細(xì)文章。NET Core在這里[4]

到目前為止,我們已經(jīng)了解了 ASP.NET Core 中 Polly 的重要策略。此外,可以在 ASP.NET Core 中為單個服務(wù)調(diào)用組合 Polly 的多個策略,例如

fallback.Wrap(waitAndRetry).Wrap(breaker).Execute(action);fallback.Execute(() => waitAndRetry.Execute(() =>breaker.Execute(action)));

概括

我們在 ASP.NET Core Web API 中了解了 Polly 的各種策略。我們在本文中看到的只是冰山一角,即我們剛剛開始并查看了策略的基本實(shí)施。

您甚至可以嘗試組合多個策略,稱為策略包裝,您可以將重試策略與回退策略或斷路器策略相結(jié)合。

我們看到了 ASP.NET Core 中 Polly 的實(shí)現(xiàn)以及策略的同步方法,所有策略也存在類似的異步方法。

下載源代碼

在這里您可以下載作為本文一部分開發(fā)的完整源代碼,即 ASP.NET Core Web API 中的 Polly

References

[1]?使用 ASP.NET Core:?https://procodeguide.com/programming/microservices-asp-net-core/
[2]?Polly:?https://github.com/App-vNext/Polly
[3]?此處:?https://procodeguide.com/programming/aspnet-core-logging-with-serilog/
[4]?在這里:?https://procodeguide.com/programming/aspnet-core-caching/

總結(jié)

以上是生活随笔為你收集整理的在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲乱码国产乱码精品精 | 亚洲精品中文字幕久久久久 | 成人一在线视频日韩国产 | 18无码粉嫩小泬无套在线观看 | 国产人成高清在线视频99最全资源 | 国产午夜福利100集发布 | 97se亚洲精品一区 | 奇米影视7777久久精品人人爽 | 人妻人人添人妻人人爱 | av小次郎收藏 | 乌克兰少妇性做爰 | 久久精品人妻少妇一区二区三区 | 性色av无码免费一区二区三区 | 久久久www成人免费毛片 | 无码国产色欲xxxxx视频 | 永久免费观看美女裸体的网站 | 丰满人妻一区二区三区免费视频 | 久久久久99精品成人片 | 曰韩无码二三区中文字幕 | 爽爽影院免费观看 | 亚洲成a人片在线观看无码 | 蜜桃臀无码内射一区二区三区 | 人妻少妇精品久久 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久久久免费精品国产 | 无遮挡国产高潮视频免费观看 | 欧美日本精品一区二区三区 | 免费人成在线观看网站 | 国产精品永久免费视频 | 九九久久精品国产免费看小说 | 野外少妇愉情中文字幕 | 国产特级毛片aaaaaa高潮流水 | 狠狠色欧美亚洲狠狠色www | 欧美自拍另类欧美综合图片区 | 欧美第一黄网免费网站 | 国产精品久久国产精品99 | 国产精品-区区久久久狼 | 国产精品-区区久久久狼 | 久久精品人人做人人综合 | 97久久超碰中文字幕 | 久久伊人色av天堂九九小黄鸭 | 国产精品久久久久久亚洲毛片 | 少妇人妻av毛片在线看 | 国内精品一区二区三区不卡 | 日韩人妻无码一区二区三区久久99 | 亚洲成a人片在线观看无码3d | 亚洲の无码国产の无码影院 | 国内老熟妇对白xxxxhd | 在线看片无码永久免费视频 | 欧美日本精品一区二区三区 | 亚洲国产精品无码一区二区三区 | 久久精品国产精品国产精品污 | 亚洲精品无码人妻无码 | 东京热一精品无码av | 无码免费一区二区三区 | 激情内射亚州一区二区三区爱妻 | 亚洲精品久久久久avwww潮水 | 国产内射老熟女aaaa | 色综合久久中文娱乐网 | 无套内谢的新婚少妇国语播放 | 天堂一区人妻无码 | 日本一卡2卡3卡四卡精品网站 | 啦啦啦www在线观看免费视频 | 国产精品无套呻吟在线 | 人妻体内射精一区二区三四 | 欧美成人高清在线播放 | 中文字幕无码av波多野吉衣 | 狠狠色欧美亚洲狠狠色www | 少女韩国电视剧在线观看完整 | 国产人妻精品一区二区三区 | 老熟妇乱子伦牲交视频 | 成人无码影片精品久久久 | 天天躁日日躁狠狠躁免费麻豆 | 国产色在线 | 国产 | 性做久久久久久久免费看 | 国产精品国产三级国产专播 | 亚洲国产精品一区二区美利坚 | 国内精品九九久久久精品 | 国产9 9在线 | 中文 | 亚洲精品中文字幕 | 亚洲精品久久久久久久久久久 | 美女极度色诱视频国产 | 欧美刺激性大交 | 好屌草这里只有精品 | 中文字幕无码人妻少妇免费 | 国产深夜福利视频在线 | 欧美大屁股xxxxhd黑色 | 熟女少妇在线视频播放 | 久久综合网欧美色妞网 | 18精品久久久无码午夜福利 | 樱花草在线播放免费中文 | 中文字幕日韩精品一区二区三区 | 美女极度色诱视频国产 | 无码中文字幕色专区 | 亚洲色大成网站www | 婷婷丁香五月天综合东京热 | 两性色午夜免费视频 | 色婷婷香蕉在线一区二区 | 国产女主播喷水视频在线观看 | 欧美兽交xxxx×视频 | 九月婷婷人人澡人人添人人爽 | 精品久久久无码中文字幕 | 国产午夜精品一区二区三区嫩草 | 日本一卡2卡3卡四卡精品网站 | 岛国片人妻三上悠亚 | 欧美第一黄网免费网站 | 麻豆蜜桃av蜜臀av色欲av | 激情五月综合色婷婷一区二区 | 欧美第一黄网免费网站 | 男女爱爱好爽视频免费看 | 国产偷国产偷精品高清尤物 | 97无码免费人妻超级碰碰夜夜 | 国产口爆吞精在线视频 | 欧美亚洲日韩国产人成在线播放 | 精品国偷自产在线 | 亚洲国产精品成人久久蜜臀 | 精品亚洲韩国一区二区三区 | 成人影院yy111111在线观看 | 色综合久久中文娱乐网 | 精品 日韩 国产 欧美 视频 | 国产精品人妻一区二区三区四 | 熟女少妇在线视频播放 | 乱人伦人妻中文字幕无码久久网 | 国产明星裸体无码xxxx视频 | 男女爱爱好爽视频免费看 | 国产午夜手机精彩视频 | 午夜免费福利小电影 | 亚洲精品久久久久avwww潮水 | 亚洲中文无码av永久不收费 | 成人综合网亚洲伊人 | 国产亚洲人成在线播放 | 少妇被粗大的猛进出69影院 | 亚洲一区av无码专区在线观看 | 中文字幕人妻无码一区二区三区 | 午夜丰满少妇性开放视频 | 国产精品.xx视频.xxtv | 国产精品丝袜黑色高跟鞋 | 中文无码伦av中文字幕 | 夜先锋av资源网站 | 久久久精品欧美一区二区免费 | 无码人中文字幕 | 无码国产乱人伦偷精品视频 | 久久精品女人的天堂av | 国产精品亚洲综合色区韩国 | 丰满少妇女裸体bbw | 国产免费久久久久久无码 | 亚洲s码欧洲m码国产av | 一本久道久久综合婷婷五月 | 亚洲一区二区三区无码久久 | 久久精品中文字幕大胸 | 成人免费视频视频在线观看 免费 | 亚洲s色大片在线观看 | 免费视频欧美无人区码 | 亚洲毛片av日韩av无码 | 精品国产一区二区三区av 性色 | 国精品人妻无码一区二区三区蜜柚 | 久久久久久av无码免费看大片 | 人人爽人人爽人人片av亚洲 | 牛和人交xxxx欧美 | yw尤物av无码国产在线观看 | 国产精品无码永久免费888 | 青春草在线视频免费观看 | 亚洲s色大片在线观看 | 亚洲一区二区三区无码久久 | 正在播放东北夫妻内射 | 亚洲人成影院在线无码按摩店 | av在线亚洲欧洲日产一区二区 | 无码人妻精品一区二区三区不卡 | 亚洲熟熟妇xxxx | 国内精品人妻无码久久久影院 | 性欧美大战久久久久久久 | 麻豆精产国品 | 国产无遮挡又黄又爽又色 | 国产亚洲视频中文字幕97精品 | 国产精品久久久久久无码 | 丰满肥臀大屁股熟妇激情视频 | 亚洲国产精品美女久久久久 | 性欧美牲交xxxxx视频 | 国产av剧情md精品麻豆 | 在线成人www免费观看视频 | 少妇性l交大片 | 午夜精品一区二区三区在线观看 | 2019nv天堂香蕉在线观看 | 麻豆蜜桃av蜜臀av色欲av | 激情国产av做激情国产爱 | 成年美女黄网站色大免费全看 | 国产人妻人伦精品1国产丝袜 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品国产第一综合99久久 | 亚洲成a人片在线观看无码3d | 国产无遮挡又黄又爽又色 | 国产美女极度色诱视频www | 伊在人天堂亚洲香蕉精品区 | 亚洲成av人综合在线观看 | 午夜熟女插插xx免费视频 | 国产精品嫩草久久久久 | 亚洲国产精品毛片av不卡在线 | 18禁黄网站男男禁片免费观看 | 国产成人无码av一区二区 | 在线 国产 欧美 亚洲 天堂 | 国色天香社区在线视频 | 丝袜足控一区二区三区 | 色窝窝无码一区二区三区色欲 | 免费无码肉片在线观看 | 国产69精品久久久久app下载 | 黑人大群体交免费视频 | 人妻插b视频一区二区三区 | 熟女体下毛毛黑森林 | 欧美性黑人极品hd | aⅴ在线视频男人的天堂 | 亚洲国产欧美日韩精品一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 午夜精品久久久久久久 | 亚洲精品成a人在线观看 | 国产亚洲精品久久久闺蜜 | 四虎国产精品免费久久 | av小次郎收藏 | 精品无人区无码乱码毛片国产 | 高清无码午夜福利视频 | 无码人妻av免费一区二区三区 | 欧美一区二区三区 | 西西人体www44rt大胆高清 | 国产精品二区一区二区aⅴ污介绍 | 天堂а√在线中文在线 | 18禁黄网站男男禁片免费观看 | 丁香啪啪综合成人亚洲 | 红桃av一区二区三区在线无码av | 亚洲色偷偷偷综合网 | 三级4级全黄60分钟 | 精品久久久久香蕉网 | 国产午夜无码视频在线观看 | 国产福利视频一区二区 | yw尤物av无码国产在线观看 | 日韩 欧美 动漫 国产 制服 | 九九热爱视频精品 | 日日碰狠狠丁香久燥 | 性色欲网站人妻丰满中文久久不卡 | 大胆欧美熟妇xx | 麻豆精品国产精华精华液好用吗 | 人人妻人人澡人人爽人人精品浪潮 | 久久久久久久人妻无码中文字幕爆 | 国产av一区二区精品久久凹凸 | 无码一区二区三区在线 | 亚洲乱码日产精品bd | 国产真实乱对白精彩久久 | 波多野结衣高清一区二区三区 | 亚洲欧美日韩成人高清在线一区 | 亚洲欧美国产精品专区久久 | 亚洲爆乳精品无码一区二区三区 | 成人影院yy111111在线观看 | 久久亚洲a片com人成 | 成人欧美一区二区三区黑人 | 无码乱肉视频免费大全合集 | 久久亚洲国产成人精品性色 | 国产真实乱对白精彩久久 | 国产成人无码av片在线观看不卡 | 97无码免费人妻超级碰碰夜夜 | 少妇性l交大片 | 久久精品人人做人人综合试看 | 自拍偷自拍亚洲精品被多人伦好爽 | 日本一卡二卡不卡视频查询 | 欧美成人家庭影院 | 亚洲国产午夜精品理论片 | 一本大道久久东京热无码av | 人妻熟女一区 | 亚洲精品中文字幕 | 超碰97人人射妻 | 白嫩日本少妇做爰 | 亚洲小说春色综合另类 | 丰满少妇高潮惨叫视频 | 97无码免费人妻超级碰碰夜夜 | 国产精品怡红院永久免费 | 久久五月精品中文字幕 | 永久免费观看国产裸体美女 | 日本在线高清不卡免费播放 | 一区二区三区高清视频一 | 国产办公室秘书无码精品99 | 天天摸天天透天天添 | 精品乱子伦一区二区三区 | 国产午夜精品一区二区三区嫩草 | 亚洲国产精品无码久久久久高潮 | 精品无码国产一区二区三区av | 亚洲gv猛男gv无码男同 | 亚洲精品国产精品乱码视色 | 亚洲色欲色欲天天天www | 中文字幕乱码亚洲无线三区 | 成人亚洲精品久久久久软件 | 狠狠色噜噜狠狠狠7777奇米 | 久久久久成人片免费观看蜜芽 | 国产成人一区二区三区别 | 一本久道久久综合狠狠爱 | 国产在线一区二区三区四区五区 | 亚洲国产欧美日韩精品一区二区三区 | 成人无码视频免费播放 | 日韩精品a片一区二区三区妖精 | 日韩精品成人一区二区三区 | 俺去俺来也在线www色官网 | 国色天香社区在线视频 | 亚洲成av人综合在线观看 | 天天燥日日燥 | 日日摸天天摸爽爽狠狠97 | 精品国产青草久久久久福利 | 欧美人与动性行为视频 | 亚洲 另类 在线 欧美 制服 | 午夜福利不卡在线视频 | 熟妇女人妻丰满少妇中文字幕 | 国产小呦泬泬99精品 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产激情无码一区二区app | 日本丰满护士爆乳xxxx | 欧美人与禽zoz0性伦交 | 国产成人无码午夜视频在线观看 | 日本xxxx色视频在线观看免费 | 久久精品国产99精品亚洲 | 中文字幕 人妻熟女 | 中文字幕精品av一区二区五区 | 亚洲大尺度无码无码专区 | 国产猛烈高潮尖叫视频免费 | 国产无遮挡又黄又爽免费视频 | 亚洲 激情 小说 另类 欧美 | 99久久久无码国产精品免费 | 欧美日本免费一区二区三区 | aⅴ在线视频男人的天堂 | 成人精品视频一区二区三区尤物 | 免费无码的av片在线观看 | 亚洲综合无码一区二区三区 | 亚洲熟妇色xxxxx亚洲 | 精品无码国产自产拍在线观看蜜 | 亚洲人成网站在线播放942 | 九九在线中文字幕无码 | 97资源共享在线视频 | 在教室伦流澡到高潮hnp视频 | 麻豆蜜桃av蜜臀av色欲av | 在线观看国产午夜福利片 | 97久久精品无码一区二区 | 六月丁香婷婷色狠狠久久 | 国产尤物精品视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 狠狠色噜噜狠狠狠7777奇米 | 成人免费无码大片a毛片 | 欧美 亚洲 国产 另类 | 久久久精品成人免费观看 | 好爽又高潮了毛片免费下载 | 亚洲自偷自偷在线制服 | 国产又爽又黄又刺激的视频 | 无码精品人妻一区二区三区av | 日韩精品成人一区二区三区 | 成人综合网亚洲伊人 | 九九久久精品国产免费看小说 | 亚洲精品美女久久久久久久 | 欧美老妇交乱视频在线观看 | 人妻天天爽夜夜爽一区二区 | 中文字幕乱码亚洲无线三区 | 扒开双腿吃奶呻吟做受视频 | 国产精品亚洲а∨无码播放麻豆 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 成人无码影片精品久久久 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 给我免费的视频在线观看 | 亚洲成av人在线观看网址 | 老熟女乱子伦 | 网友自拍区视频精品 | 中文字幕中文有码在线 | 在线观看欧美一区二区三区 | 精品人人妻人人澡人人爽人人 | 国产一精品一av一免费 | 成人亚洲精品久久久久 | 午夜福利试看120秒体验区 | 美女毛片一区二区三区四区 | 久久97精品久久久久久久不卡 | 影音先锋中文字幕无码 | 欧美熟妇另类久久久久久多毛 | 99久久久无码国产aaa精品 | 国产精品久久久久无码av色戒 | 在线精品国产一区二区三区 | 最近免费中文字幕中文高清百度 | 欧美午夜特黄aaaaaa片 | 国产人妻精品一区二区三区不卡 | 国产人妻精品午夜福利免费 | 亚洲精品中文字幕乱码 | 亚洲一区二区观看播放 | 俺去俺来也在线www色官网 | 欧美 亚洲 国产 另类 | 色综合久久久无码网中文 | 狠狠色欧美亚洲狠狠色www | 日韩av无码一区二区三区不卡 | 99精品国产综合久久久久五月天 | 国产国产精品人在线视 | 狠狠色欧美亚洲狠狠色www | 精品一二三区久久aaa片 | 精品无码一区二区三区的天堂 | 日韩精品成人一区二区三区 | 少妇人妻大乳在线视频 | 又大又黄又粗又爽的免费视频 | 一区二区三区乱码在线 | 欧洲 | 国内精品人妻无码久久久影院 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产猛烈高潮尖叫视频免费 | 国产午夜手机精彩视频 | 亚洲爆乳精品无码一区二区三区 | 免费人成在线观看网站 | 亚洲综合色区中文字幕 | 欧美老妇交乱视频在线观看 | 久激情内射婷内射蜜桃人妖 | 天天做天天爱天天爽综合网 | 色情久久久av熟女人妻网站 | 俺去俺来也www色官网 | 麻豆精品国产精华精华液好用吗 | 一区二区传媒有限公司 | 欧洲熟妇精品视频 | 女人和拘做爰正片视频 | av人摸人人人澡人人超碰下载 | 中文字幕日韩精品一区二区三区 | 99久久婷婷国产综合精品青草免费 | 97精品人妻一区二区三区香蕉 | 中国大陆精品视频xxxx | 久久久久久久女国产乱让韩 | 久久久精品成人免费观看 | 国产亚洲tv在线观看 | 一本色道久久综合狠狠躁 | ass日本丰满熟妇pics | 波多野结衣av一区二区全免费观看 | 麻豆国产丝袜白领秘书在线观看 | 天天躁夜夜躁狠狠是什么心态 | 在线观看国产一区二区三区 | 国产亚洲精品久久久久久大师 | 天天躁夜夜躁狠狠是什么心态 | 亚洲热妇无码av在线播放 | 少妇被粗大的猛进出69影院 | 国产亚洲精品久久久ai换 | 99久久精品国产一区二区蜜芽 | 国产超碰人人爽人人做人人添 | 精品无码国产自产拍在线观看蜜 | 亚洲成色在线综合网站 | 国产电影无码午夜在线播放 | 乱人伦人妻中文字幕无码 | 亚洲精品无码人妻无码 | 少妇无套内谢久久久久 | 中文字幕无线码 | 国产精品沙发午睡系列 | 人人澡人人透人人爽 | 国产av一区二区三区最新精品 | 国内精品人妻无码久久久影院 | 日韩成人一区二区三区在线观看 | 一本色道久久综合狠狠躁 | 国产亚洲视频中文字幕97精品 | 久久97精品久久久久久久不卡 | 在线亚洲高清揄拍自拍一品区 | 2020最新国产自产精品 | 男人扒开女人内裤强吻桶进去 | 亚洲熟悉妇女xxx妇女av | 成年女人永久免费看片 | 狠狠色欧美亚洲狠狠色www | 成人影院yy111111在线观看 | 人妻体内射精一区二区三四 | 精品人妻人人做人人爽 | 18精品久久久无码午夜福利 | 亚拍精品一区二区三区探花 | 人人妻人人澡人人爽欧美一区九九 | 天堂久久天堂av色综合 | 色综合久久久久综合一本到桃花网 | 午夜精品一区二区三区在线观看 | 久久无码中文字幕免费影院蜜桃 | 乌克兰少妇性做爰 | 国内老熟妇对白xxxxhd | 国产精品人妻一区二区三区四 | 久久精品国产一区二区三区 | 男人的天堂av网站 | 国产卡一卡二卡三 | 成 人影片 免费观看 | 人人妻人人澡人人爽人人精品浪潮 | 漂亮人妻洗澡被公强 日日躁 | 国产国语老龄妇女a片 | 最新国产麻豆aⅴ精品无码 | 久久熟妇人妻午夜寂寞影院 | 日本乱人伦片中文三区 | 亚洲小说春色综合另类 | 亚洲国产精品久久久久久 | 熟女俱乐部五十路六十路av | 特大黑人娇小亚洲女 | 熟妇人妻无码xxx视频 | 成人av无码一区二区三区 | 日韩 欧美 动漫 国产 制服 | 成人三级无码视频在线观看 | 奇米影视7777久久精品 | 丝袜美腿亚洲一区二区 | 亚洲自偷自偷在线制服 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久国产自偷自偷免费一区调 | 99久久精品日本一区二区免费 | 丰满少妇人妻久久久久久 | 成人精品视频一区二区三区尤物 | 亚洲欧美精品aaaaaa片 | 99麻豆久久久国产精品免费 | 乱码av麻豆丝袜熟女系列 | 婷婷色婷婷开心五月四房播播 | 撕开奶罩揉吮奶头视频 | 无码人妻丰满熟妇区毛片18 | 中文无码伦av中文字幕 | 久久久国产精品无码免费专区 | 女人被男人爽到呻吟的视频 | 精品人妻人人做人人爽夜夜爽 | 亚洲精品一区二区三区四区五区 | 免费国产成人高清在线观看网站 | 久久99精品国产麻豆 | 国产亚洲精品久久久闺蜜 | 国产真人无遮挡作爱免费视频 | 性色欲网站人妻丰满中文久久不卡 | 性开放的女人aaa片 | 亚洲理论电影在线观看 | 国产亚洲视频中文字幕97精品 | 国产内射爽爽大片视频社区在线 | 亚洲熟悉妇女xxx妇女av | 国产av久久久久精东av | 色情久久久av熟女人妻网站 | 久激情内射婷内射蜜桃人妖 | 亚洲成av人综合在线观看 | 国内精品人妻无码久久久影院 | 无人区乱码一区二区三区 | 日本肉体xxxx裸交 | 久久人人97超碰a片精品 | 亚洲色欲久久久综合网东京热 | 久久精品人妻少妇一区二区三区 | 亚洲精品一区三区三区在线观看 | 国产精品第一区揄拍无码 | 久久久国产一区二区三区 | 香蕉久久久久久av成人 | 无码人妻精品一区二区三区不卡 | 日本成熟视频免费视频 | 天天综合网天天综合色 | 亚洲 日韩 欧美 成人 在线观看 | 国产绳艺sm调教室论坛 | 人妻互换免费中文字幕 | 亚洲日韩精品欧美一区二区 | 国产色视频一区二区三区 | 熟妇人妻中文av无码 | 久热国产vs视频在线观看 | 久久国产精品偷任你爽任你 | 国产九九九九九九九a片 | 成人无码精品一区二区三区 | 正在播放东北夫妻内射 | 99精品国产综合久久久久五月天 | 九九热爱视频精品 | 久久人人爽人人爽人人片ⅴ | 丰满人妻被黑人猛烈进入 | 久久天天躁狠狠躁夜夜免费观看 | 丰满人妻翻云覆雨呻吟视频 | 亚洲乱码日产精品bd | 亚洲中文字幕乱码av波多ji | 亚洲国产精品无码久久久久高潮 | 国产精品久久国产精品99 | 一区二区三区高清视频一 | 亚洲综合精品香蕉久久网 | 亚洲综合伊人久久大杳蕉 | 中文字幕av无码一区二区三区电影 | 高潮毛片无遮挡高清免费视频 | 欧美国产日产一区二区 | 麻豆国产丝袜白领秘书在线观看 | 波多野结衣 黑人 | 亚洲人亚洲人成电影网站色 | 伊人色综合久久天天小片 | 亚洲精品国产精品乱码视色 | 国产激情精品一区二区三区 | 国产乡下妇女做爰 | 好爽又高潮了毛片免费下载 | 国产精品va在线播放 | 久久久久久久久蜜桃 | 男女作爱免费网站 | 日韩精品无码一区二区中文字幕 | 国产莉萝无码av在线播放 | 中文字幕无码日韩欧毛 | 亚洲精品久久久久久久久久久 | 久久综合香蕉国产蜜臀av | 中文精品无码中文字幕无码专区 | 国产精品美女久久久久av爽李琼 | 日本一本二本三区免费 | 中文字幕无码人妻少妇免费 | 欧美性黑人极品hd | 捆绑白丝粉色jk震动捧喷白浆 | 精品一区二区三区波多野结衣 | 色欲久久久天天天综合网精品 | 三级4级全黄60分钟 | 天堂亚洲免费视频 | 十八禁视频网站在线观看 | 国产女主播喷水视频在线观看 | 中文字幕乱码中文乱码51精品 | 亚洲无人区午夜福利码高清完整版 | 亚洲欧美日韩国产精品一区二区 | 亚洲最大成人网站 | 午夜熟女插插xx免费视频 | 亚洲中文无码av永久不收费 | 天天av天天av天天透 | 国精产品一品二品国精品69xx | 日本丰满护士爆乳xxxx | 国产特级毛片aaaaaaa高清 | 欧美午夜特黄aaaaaa片 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品久久国产精品99 | 亚洲成a人片在线观看日本 | 俄罗斯老熟妇色xxxx | 亚洲精品中文字幕乱码 | 免费人成在线视频无码 | 日韩精品乱码av一区二区 | 国产精品无码久久av | 狠狠亚洲超碰狼人久久 | 亚洲精品中文字幕久久久久 | 最新国产麻豆aⅴ精品无码 | 国产成人久久精品流白浆 | 亚洲综合伊人久久大杳蕉 | 久久天天躁狠狠躁夜夜免费观看 | 欧美激情综合亚洲一二区 | 中文字幕乱码人妻无码久久 | 亚洲成色在线综合网站 | 曰本女人与公拘交酡免费视频 | 亚洲国产高清在线观看视频 | 男女超爽视频免费播放 | 免费无码肉片在线观看 | 亚洲va中文字幕无码久久不卡 | 蜜桃无码一区二区三区 | 欧美精品国产综合久久 | 国产综合在线观看 | 亚洲日韩av一区二区三区四区 | 欧美日韩在线亚洲综合国产人 | a片免费视频在线观看 | 国产艳妇av在线观看果冻传媒 | 在线 国产 欧美 亚洲 天堂 | 精品久久久无码人妻字幂 | 久久综合九色综合97网 | 奇米影视7777久久精品 | 免费网站看v片在线18禁无码 | 男女作爱免费网站 | 欧美丰满熟妇xxxx | 狠狠色噜噜狠狠狠7777奇米 | 精品乱码久久久久久久 | 国产精品爱久久久久久久 | 国产又爽又猛又粗的视频a片 | 999久久久国产精品消防器材 | 国产香蕉尹人视频在线 | aⅴ在线视频男人的天堂 | 精品人妻av区 | 又大又硬又黄的免费视频 | 国内老熟妇对白xxxxhd | 天天摸天天透天天添 | 77777熟女视频在线观看 а天堂中文在线官网 | 国语精品一区二区三区 | 国产亚洲精品久久久久久久 | 精品无码国产一区二区三区av | 中文字幕人妻无码一区二区三区 | 欧美性猛交内射兽交老熟妇 | 秋霞成人午夜鲁丝一区二区三区 | 婷婷色婷婷开心五月四房播播 | 内射后入在线观看一区 | 老司机亚洲精品影院 | 玩弄中年熟妇正在播放 | 日日碰狠狠丁香久燥 | 国产三级久久久精品麻豆三级 | 精品国产一区二区三区四区 | 任你躁在线精品免费 | 亚洲综合色区中文字幕 | 久久国产精品偷任你爽任你 | 亚洲中文字幕成人无码 | 少女韩国电视剧在线观看完整 | 99麻豆久久久国产精品免费 | 无遮挡国产高潮视频免费观看 | 午夜福利试看120秒体验区 | 国产亚洲精品久久久闺蜜 | 又粗又大又硬毛片免费看 | 日本肉体xxxx裸交 | 无码av最新清无码专区吞精 | 久久精品中文闷骚内射 | 鲁一鲁av2019在线 | 99riav国产精品视频 | 国产 精品 自在自线 | 午夜精品久久久久久久久 | 美女毛片一区二区三区四区 | 国产无av码在线观看 | 中文字幕无码免费久久9一区9 | 女人和拘做爰正片视频 | 中文字幕无码免费久久9一区9 | 女人和拘做爰正片视频 | 99久久人妻精品免费二区 | 又粗又大又硬又长又爽 | 国产区女主播在线观看 | 午夜成人1000部免费视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产午夜亚洲精品不卡下载 | 日韩精品无码一本二本三本色 | 久久人妻内射无码一区三区 | 亚洲精品国产精品乱码不卡 | av无码不卡在线观看免费 | 国产精品亚洲五月天高清 | 老司机亚洲精品影院无码 | 青草青草久热国产精品 | 野外少妇愉情中文字幕 | 欧美国产日产一区二区 | 正在播放东北夫妻内射 | av无码电影一区二区三区 | 影音先锋中文字幕无码 | 乱人伦人妻中文字幕无码 | 欧美自拍另类欧美综合图片区 | 色一情一乱一伦 | 无码中文字幕色专区 | 中文毛片无遮挡高清免费 | 亚洲一区二区三区四区 | 成人无码精品1区2区3区免费看 | 午夜精品一区二区三区的区别 | 精品无码一区二区三区爱欲 | 又大又硬又爽免费视频 | 麻豆国产人妻欲求不满 | 熟女体下毛毛黑森林 | 沈阳熟女露脸对白视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 狠狠亚洲超碰狼人久久 | 久久久久99精品成人片 | 国产在线精品一区二区高清不卡 | av人摸人人人澡人人超碰下载 | 激情综合激情五月俺也去 | 国产情侣作爱视频免费观看 | 日韩亚洲欧美中文高清在线 | 在线看片无码永久免费视频 | 麻豆国产人妻欲求不满谁演的 | 午夜精品一区二区三区在线观看 | 成人片黄网站色大片免费观看 | 国产午夜福利100集发布 | 永久免费观看国产裸体美女 | 国产成人人人97超碰超爽8 | 国产精品久免费的黄网站 | 日产精品99久久久久久 | 狠狠色丁香久久婷婷综合五月 | 色婷婷久久一区二区三区麻豆 | 日本熟妇乱子伦xxxx | 精品亚洲韩国一区二区三区 | 亚洲日韩av一区二区三区四区 | 国产精品久久久一区二区三区 | 色五月五月丁香亚洲综合网 | 初尝人妻少妇中文字幕 | 99久久久国产精品无码免费 | 亚洲精品久久久久久久久久久 | 中文字幕 人妻熟女 | 国产精品人妻一区二区三区四 | 国产欧美熟妇另类久久久 | 日本一区二区三区免费播放 | 亚洲人亚洲人成电影网站色 | 色老头在线一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 波多野结衣一区二区三区av免费 | 国产一区二区不卡老阿姨 | 亚洲成a人片在线观看日本 | 亚洲 a v无 码免 费 成 人 a v | 国产国语老龄妇女a片 | 爱做久久久久久 | 国产精品久久久午夜夜伦鲁鲁 | 中文字幕无码av激情不卡 | 日韩欧美成人免费观看 | 樱花草在线播放免费中文 | 无码国内精品人妻少妇 | 高潮毛片无遮挡高清免费 | 日本大香伊一区二区三区 | 亚洲欧美中文字幕5发布 | 97久久国产亚洲精品超碰热 | 亚洲精品中文字幕 | 中文字幕无码热在线视频 | 又粗又大又硬又长又爽 | 狂野欧美性猛xxxx乱大交 | 久久综合狠狠综合久久综合88 | 亚洲国产精品一区二区美利坚 | 欧美野外疯狂做受xxxx高潮 | 欧美zoozzooz性欧美 | 精品久久久久久亚洲精品 | 久久综合香蕉国产蜜臀av | 国产真人无遮挡作爱免费视频 | 欧美第一黄网免费网站 | 久久久精品欧美一区二区免费 | 国产精品内射视频免费 | 未满成年国产在线观看 | 国产亚洲美女精品久久久2020 | 久久熟妇人妻午夜寂寞影院 | 精品乱子伦一区二区三区 | 欧美肥老太牲交大战 | 粗大的内捧猛烈进出视频 | 3d动漫精品啪啪一区二区中 | 偷窥日本少妇撒尿chinese | 久久 国产 尿 小便 嘘嘘 | 九九久久精品国产免费看小说 | 久久久久免费看成人影片 | 日日躁夜夜躁狠狠躁 | 亚洲最大成人网站 | 人人妻人人澡人人爽人人精品 | 欧美国产亚洲日韩在线二区 | 天天做天天爱天天爽综合网 | 国产熟女一区二区三区四区五区 | 色综合久久久无码中文字幕 | 亚洲精品久久久久中文第一幕 | 婷婷综合久久中文字幕蜜桃三电影 | 国产精品a成v人在线播放 | 精品无码一区二区三区爱欲 | 久久人人爽人人爽人人片av高清 | 天堂亚洲免费视频 | 国产麻豆精品一区二区三区v视界 | 国产精品亚洲专区无码不卡 | 欧美性生交xxxxx久久久 | 最近的中文字幕在线看视频 | 国产精品美女久久久久av爽李琼 | 久久精品99久久香蕉国产色戒 | 久久久久久久久888 | 国产精品国产自线拍免费软件 | 久久久久久av无码免费看大片 | 日韩人妻无码中文字幕视频 | 在线观看国产午夜福利片 | 久9re热视频这里只有精品 | av香港经典三级级 在线 | 骚片av蜜桃精品一区 | 日日摸天天摸爽爽狠狠97 | 99精品国产综合久久久久五月天 | 国产精品第一国产精品 | 日本熟妇乱子伦xxxx | 精品国产青草久久久久福利 | 一本久道久久综合狠狠爱 | 粗大的内捧猛烈进出视频 | 毛片内射-百度 | 国产97人人超碰caoprom | 国内少妇偷人精品视频 | 成熟妇人a片免费看网站 | 国产亚洲精品久久久久久久 | 国产香蕉97碰碰久久人人 | 日韩人妻无码一区二区三区久久99 | 国产艳妇av在线观看果冻传媒 | 99在线 | 亚洲 | 国产9 9在线 | 中文 | 国产99久久精品一区二区 | 男人的天堂2018无码 | 国产肉丝袜在线观看 | 丰满人妻被黑人猛烈进入 | 男人扒开女人内裤强吻桶进去 | 国产精品人妻一区二区三区四 | 无码人妻黑人中文字幕 | 国产乱人伦av在线无码 | 国产在线aaa片一区二区99 | 欧美老人巨大xxxx做受 | 2019nv天堂香蕉在线观看 | 亚洲高清偷拍一区二区三区 | 一本大道久久东京热无码av | 久久99精品国产麻豆 | 国产偷自视频区视频 | 精品国产麻豆免费人成网站 | 国产又粗又硬又大爽黄老大爷视 | 久久无码人妻影院 | 亚洲乱码中文字幕在线 | 麻花豆传媒剧国产免费mv在线 | 国产一区二区不卡老阿姨 | 乱人伦人妻中文字幕无码 | 国产乱人伦av在线无码 | 秋霞成人午夜鲁丝一区二区三区 | 国产亚洲精品久久久久久久 | 中文字幕av日韩精品一区二区 | 久久久久免费看成人影片 | 国产精品第一区揄拍无码 | 国产又爽又猛又粗的视频a片 | 国产精品久久久久久久影院 | 狂野欧美激情性xxxx | 国产超碰人人爽人人做人人添 | aa片在线观看视频在线播放 | 97精品国产97久久久久久免费 | 正在播放东北夫妻内射 | www国产亚洲精品久久久日本 | 精品亚洲成av人在线观看 | 国产午夜手机精彩视频 | 中文无码伦av中文字幕 | 天海翼激烈高潮到腰振不止 | 六十路熟妇乱子伦 | 偷窥日本少妇撒尿chinese | 俺去俺来也在线www色官网 | 无码人妻丰满熟妇区毛片18 | 极品嫩模高潮叫床 | 国产欧美熟妇另类久久久 | 亚洲一区av无码专区在线观看 | 国产九九九九九九九a片 | 国产成人一区二区三区在线观看 | 国产精品人人爽人人做我的可爱 | 好爽又高潮了毛片免费下载 | 国产成人无码a区在线观看视频app | 无遮无挡爽爽免费视频 | 久久精品无码一区二区三区 | 久久www免费人成人片 | 国产又爽又猛又粗的视频a片 | 清纯唯美经典一区二区 | 人人妻人人澡人人爽人人精品 | 国产办公室秘书无码精品99 | 国产成人精品一区二区在线小狼 | 免费网站看v片在线18禁无码 | 国产精品人妻一区二区三区四 | 无码国产乱人伦偷精品视频 | 免费看男女做好爽好硬视频 | 国产熟妇高潮叫床视频播放 | 欧美黑人巨大xxxxx | 欧美丰满少妇xxxx性 | 中文字幕色婷婷在线视频 | 精品久久8x国产免费观看 | 少妇愉情理伦片bd | 亚洲熟妇色xxxxx欧美老妇 | 国精品人妻无码一区二区三区蜜柚 | 精品人妻人人做人人爽夜夜爽 | 男女超爽视频免费播放 | 日日噜噜噜噜夜夜爽亚洲精品 | 3d动漫精品啪啪一区二区中 | 国产亚洲精品久久久久久 | 亚洲欧美综合区丁香五月小说 | 国产又爽又猛又粗的视频a片 | 国产精品久久久久7777 | 免费观看黄网站 | 亚洲成a人片在线观看无码 | 日韩欧美中文字幕在线三区 | 亚洲精品国产a久久久久久 | 女人被爽到呻吟gif动态图视看 | 久久精品成人欧美大片 | 久久久精品国产sm最大网站 | 荫蒂被男人添的好舒服爽免费视频 | 久久99精品国产.久久久久 | 人人妻人人澡人人爽欧美一区九九 | 55夜色66夜色国产精品视频 | 一个人看的视频www在线 | 1000部啪啪未满十八勿入下载 | 亚洲国产精品成人久久蜜臀 | 亚洲另类伦春色综合小说 | 麻豆果冻传媒2021精品传媒一区下载 | 免费乱码人妻系列无码专区 | 亚洲精品久久久久avwww潮水 | 最新国产麻豆aⅴ精品无码 | 嫩b人妻精品一区二区三区 | 国产精品美女久久久 | 亚洲一区av无码专区在线观看 | 成人影院yy111111在线观看 | 亚洲欧美综合区丁香五月小说 | 欧洲美熟女乱又伦 | 精品 日韩 国产 欧美 视频 | 超碰97人人做人人爱少妇 | 精品国产一区二区三区四区在线看 | 国产特级毛片aaaaaa高潮流水 | 丰满肥臀大屁股熟妇激情视频 | 99久久久无码国产精品免费 | 亚洲国产精品一区二区美利坚 | 无码人妻精品一区二区三区不卡 | 亚洲成a人片在线观看无码3d | 人妻少妇精品无码专区动漫 | 亚洲性无码av中文字幕 | 国产sm调教视频在线观看 | 综合人妻久久一区二区精品 | 中文字幕乱码人妻无码久久 | 亚洲精品国产品国语在线观看 | 国产精品嫩草久久久久 | 亚洲狠狠婷婷综合久久 | 中文字幕乱码亚洲无线三区 | 亚洲人亚洲人成电影网站色 | 亚洲综合久久一区二区 | 国产人成高清在线视频99最全资源 | 人妻天天爽夜夜爽一区二区 | 中文亚洲成a人片在线观看 | 成年美女黄网站色大免费视频 | 国产亚洲精品久久久久久久久动漫 | 亚洲精品美女久久久久久久 | 国产av人人夜夜澡人人爽麻豆 | 乱人伦人妻中文字幕无码久久网 | 国产一区二区三区影院 | 午夜无码人妻av大片色欲 | 骚片av蜜桃精品一区 | 色一情一乱一伦一区二区三欧美 | 国产在热线精品视频 | 亚洲一区二区三区国产精华液 | 成人aaa片一区国产精品 | 国产激情精品一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 久久久av男人的天堂 | 天堂а√在线中文在线 | 成人aaa片一区国产精品 | 久久www免费人成人片 | 日日摸天天摸爽爽狠狠97 | 大肉大捧一进一出好爽视频 | 国产亚洲精品久久久久久 | 一本色道久久综合狠狠躁 | 亚洲天堂2017无码 | 俺去俺来也在线www色官网 | 免费乱码人妻系列无码专区 | 久久人人爽人人爽人人片av高清 | 久久精品99久久香蕉国产色戒 | 亚洲成av人片在线观看无码不卡 | 国产成人无码区免费内射一片色欲 | 国产精品a成v人在线播放 | 伊人久久大香线焦av综合影院 | 丰满少妇女裸体bbw | 欧美日本精品一区二区三区 | 偷窥日本少妇撒尿chinese | 亚洲熟妇色xxxxx欧美老妇 | 人人妻人人澡人人爽欧美精品 | 精品无码国产自产拍在线观看蜜 | 免费无码午夜福利片69 | 欧美 丝袜 自拍 制服 另类 | 久久午夜无码鲁丝片秋霞 | 成人欧美一区二区三区黑人 | 亚洲欧美综合区丁香五月小说 | 男人的天堂av网站 | 人妻天天爽夜夜爽一区二区 | 老头边吃奶边弄进去呻吟 | 97夜夜澡人人爽人人喊中国片 | 色综合久久中文娱乐网 | 久久久久人妻一区精品色欧美 | 中文字幕精品av一区二区五区 | 国产亚洲精品久久久久久久久动漫 | 婷婷色婷婷开心五月四房播播 | 欧美怡红院免费全部视频 | 日本精品少妇一区二区三区 | 精品厕所偷拍各类美女tp嘘嘘 | 天下第一社区视频www日本 | 少妇无码一区二区二三区 | 亚洲中文无码av永久不收费 | 无人区乱码一区二区三区 | 狠狠色欧美亚洲狠狠色www | 欧美丰满熟妇xxxx | 欧美人与物videos另类 | 亚洲一区二区三区无码久久 | 免费看男女做好爽好硬视频 | 九九久久精品国产免费看小说 | 欧美大屁股xxxxhd黑色 | 国产精品欧美成人 | 国产亚洲精品精品国产亚洲综合 | 精品夜夜澡人妻无码av蜜桃 | 精品亚洲韩国一区二区三区 | 久久久精品成人免费观看 | 国产农村乱对白刺激视频 | 激情国产av做激情国产爱 | 亚洲精品中文字幕久久久久 | 99精品视频在线观看免费 | 国产成人久久精品流白浆 | 久久精品国产99精品亚洲 | 精品国产一区av天美传媒 | 未满成年国产在线观看 | 无码任你躁久久久久久久 | 成人精品天堂一区二区三区 | 又大又硬又黄的免费视频 | 丰满护士巨好爽好大乳 | 精品人妻中文字幕有码在线 | www成人国产高清内射 | 熟女少妇在线视频播放 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产精品手机免费 | 欧美freesex黑人又粗又大 | 无遮挡啪啪摇乳动态图 | 亚洲一区二区三区播放 | 六月丁香婷婷色狠狠久久 | 俺去俺来也在线www色官网 | 久久99久久99精品中文字幕 | 久久久精品成人免费观看 | 久久国产精品精品国产色婷婷 | 成人精品天堂一区二区三区 | 在线a亚洲视频播放在线观看 | 国内精品久久毛片一区二区 | 内射爽无广熟女亚洲 | 亚洲人成网站免费播放 | 成人一在线视频日韩国产 | 国内少妇偷人精品视频 | 77777熟女视频在线观看 а天堂中文在线官网 | 女人高潮内射99精品 | 婷婷五月综合缴情在线视频 | 亚洲 激情 小说 另类 欧美 | 女人和拘做爰正片视频 | 国产精品久久久一区二区三区 | 欧美成人高清在线播放 | 熟女体下毛毛黑森林 | 亚洲人亚洲人成电影网站色 | 亚洲啪av永久无码精品放毛片 | 国产极品美女高潮无套在线观看 | 麻豆国产97在线 | 欧洲 | 国产精品对白交换视频 | 日本乱偷人妻中文字幕 | 成人欧美一区二区三区黑人免费 | 奇米影视7777久久精品 | 夜精品a片一区二区三区无码白浆 | 少妇无码一区二区二三区 | 久久国产自偷自偷免费一区调 | 成人片黄网站色大片免费观看 | 免费无码肉片在线观看 | 亚洲伊人久久精品影院 | 人妻无码久久精品人妻 | 久青草影院在线观看国产 | 男人和女人高潮免费网站 | 精品欧洲av无码一区二区三区 | 亚洲日韩av一区二区三区中文 | 亚洲综合无码久久精品综合 | 午夜福利电影 | 2020久久超碰国产精品最新 | 国产成人无码av片在线观看不卡 | 内射爽无广熟女亚洲 | 日本www一道久久久免费榴莲 | 亚欧洲精品在线视频免费观看 | 兔费看少妇性l交大片免费 | 久久99热只有频精品8 | 国产精品久久久久久亚洲影视内衣 | 亚洲人亚洲人成电影网站色 | 国产精品99久久精品爆乳 | 亚洲精品一区二区三区大桥未久 | 国产无遮挡又黄又爽又色 | 国产莉萝无码av在线播放 | 骚片av蜜桃精品一区 | 狠狠色丁香久久婷婷综合五月 | 东北女人啪啪对白 | 国产一区二区三区影院 | 久久精品99久久香蕉国产色戒 | 又色又爽又黄的美女裸体网站 | 蜜桃视频韩日免费播放 | 无码人妻少妇伦在线电影 | 久久zyz资源站无码中文动漫 | 中文字幕人妻无码一夲道 | 97精品人妻一区二区三区香蕉 | 老子影院午夜精品无码 | 天海翼激烈高潮到腰振不止 | 亚洲精品欧美二区三区中文字幕 | 午夜性刺激在线视频免费 | 婷婷色婷婷开心五月四房播播 | 又大又紧又粉嫩18p少妇 | 国产乱人无码伦av在线a | 国产香蕉尹人视频在线 | 久久久久亚洲精品男人的天堂 | 亚洲欧美日韩综合久久久 | 日本大乳高潮视频在线观看 | 美女扒开屁股让男人桶 | 亚洲小说图区综合在线 | 久久精品人妻少妇一区二区三区 | 天堂а√在线中文在线 | 久久熟妇人妻午夜寂寞影院 | 亚洲欧美色中文字幕在线 | 国产精品嫩草久久久久 | 精品久久久中文字幕人妻 | 人妻少妇精品无码专区动漫 | 久久99国产综合精品 | 少妇久久久久久人妻无码 | 中文字幕无码免费久久99 | 97久久国产亚洲精品超碰热 | 永久免费观看国产裸体美女 | 亚洲综合色区中文字幕 | 免费乱码人妻系列无码专区 | 丰满肥臀大屁股熟妇激情视频 | 伊人久久大香线蕉亚洲 | 国产精品亚洲lv粉色 | 成人动漫在线观看 | 性做久久久久久久久 | 国产真实夫妇视频 | www一区二区www免费 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲色欲色欲欲www在线 | 亚洲日本一区二区三区在线 | 熟妇人妻中文av无码 | 精品国产一区二区三区av 性色 | 国产精品久久久久9999小说 | 中文字幕无码免费久久99 | 天天躁夜夜躁狠狠是什么心态 | 18禁止看的免费污网站 | 欧美人与禽zoz0性伦交 | 无码人中文字幕 | 精品熟女少妇av免费观看 | 亚洲一区二区三区国产精华液 | 久久精品国产99久久6动漫 | 国内精品一区二区三区不卡 | 亚洲国产日韩a在线播放 | 亚洲熟妇色xxxxx欧美老妇y | 亚洲热妇无码av在线播放 | 荫蒂被男人添的好舒服爽免费视频 | 国产精品人妻一区二区三区四 | 国产极品视觉盛宴 | 男人的天堂2018无码 | 日本精品少妇一区二区三区 | 国产精品久久久久久久9999 | 午夜精品一区二区三区在线观看 | www国产亚洲精品久久网站 | 双乳奶水饱满少妇呻吟 | 亚洲国产综合无码一区 | 野狼第一精品社区 | 亚洲无人区一区二区三区 | 国产乱人伦av在线无码 | 亚洲另类伦春色综合小说 | 波多野结衣乳巨码无在线观看 | 国产精品人人爽人人做我的可爱 | 老熟妇乱子伦牲交视频 | 日韩精品a片一区二区三区妖精 | 久久国产精品精品国产色婷婷 | 国产另类ts人妖一区二区 | 午夜成人1000部免费视频 | 亚洲精品国偷拍自产在线麻豆 | 精品 日韩 国产 欧美 视频 | 高潮毛片无遮挡高清免费 | 九一九色国产 | 无码国产激情在线观看 | 久久精品国产99精品亚洲 | 亚洲爆乳精品无码一区二区三区 | 亚洲精品中文字幕久久久久 | 亚洲精品成人福利网站 | 久久99精品国产.久久久久 | 一本色道久久综合狠狠躁 | 香蕉久久久久久av成人 | 又湿又紧又大又爽a视频国产 | 成人精品视频一区二区 | 乌克兰少妇性做爰 | 九一九色国产 | 青青草原综合久久大伊人精品 | 未满小14洗澡无码视频网站 | 性欧美熟妇videofreesex | 日本爽爽爽爽爽爽在线观看免 | 成人女人看片免费视频放人 | 性欧美熟妇videofreesex | 日本精品高清一区二区 | 丝袜 中出 制服 人妻 美腿 | 无码人妻丰满熟妇区毛片18 | 麻豆精品国产精华精华液好用吗 | 又粗又大又硬毛片免费看 | 免费乱码人妻系列无码专区 | 国产乱人无码伦av在线a | 国产精品毛多多水多 | 水蜜桃亚洲一二三四在线 | 真人与拘做受免费视频一 | 中国女人内谢69xxxxxa片 | 亚洲精品一区三区三区在线观看 | 天天爽夜夜爽夜夜爽 | 性史性农村dvd毛片 | 精品国产一区二区三区av 性色 | 亚洲午夜福利在线观看 | 性啪啪chinese东北女人 | 国内精品久久久久久中文字幕 | 极品嫩模高潮叫床 | 成人免费视频视频在线观看 免费 | 欧美真人作爱免费视频 | 久久亚洲中文字幕精品一区 | 国产网红无码精品视频 | 亚洲日本在线电影 | 亚洲欧美日韩成人高清在线一区 | av无码不卡在线观看免费 | 国产9 9在线 | 中文 | 国产激情无码一区二区app | 领导边摸边吃奶边做爽在线观看 | 国产区女主播在线观看 | 爱做久久久久久 | 久久精品国产亚洲精品 | 激情综合激情五月俺也去 | 四虎国产精品一区二区 | 丰满人妻翻云覆雨呻吟视频 | 无套内射视频囯产 | 国内精品人妻无码久久久影院蜜桃 | 午夜精品一区二区三区在线观看 | 久久久久久av无码免费看大片 | 亚洲va欧美va天堂v国产综合 | 亚洲一区二区三区在线观看网站 | 精品欧洲av无码一区二区三区 | 免费男性肉肉影院 | 无套内射视频囯产 | 好男人社区资源 | 自拍偷自拍亚洲精品10p | 美女毛片一区二区三区四区 | 中国女人内谢69xxxx | 日韩人妻无码一区二区三区久久99 | 波多野结衣高清一区二区三区 | 亚洲gv猛男gv无码男同 | 中文字幕人妻无码一夲道 | 极品尤物被啪到呻吟喷水 | 成人片黄网站色大片免费观看 | 骚片av蜜桃精品一区 | 国产三级久久久精品麻豆三级 | 亚洲精品综合一区二区三区在线 | 欧美国产日韩久久mv | 乌克兰少妇性做爰 | 日日夜夜撸啊撸 | 东京一本一道一二三区 | 国产乱码精品一品二品 | 午夜精品久久久内射近拍高清 | 日本大香伊一区二区三区 | 亚洲伊人久久精品影院 | 精品夜夜澡人妻无码av蜜桃 | 日日麻批免费40分钟无码 | 精品国产福利一区二区 | 国产真实夫妇视频 | 天堂а√在线中文在线 | 国产一区二区三区精品视频 | 国产精品国产三级国产专播 | 任你躁在线精品免费 | 久久99精品国产.久久久久 | 亚洲日韩一区二区 | 精品无码一区二区三区爱欲 | 99久久人妻精品免费一区 | 亚洲成a人片在线观看无码3d | 中文字幕 人妻熟女 | 国产精品怡红院永久免费 | 人妻少妇精品无码专区动漫 | 丁香花在线影院观看在线播放 | 日本www一道久久久免费榴莲 | 亚洲综合精品香蕉久久网 | 国产精品毛多多水多 | 亚洲一区二区三区四区 | 国产人妖乱国产精品人妖 | 久久精品人人做人人综合 | 伊人久久大香线蕉av一区二区 | 久热国产vs视频在线观看 | 亚洲中文字幕无码一久久区 | 国产麻豆精品一区二区三区v视界 | 国内精品九九久久久精品 | 无码av岛国片在线播放 | 国产精品沙发午睡系列 | 国产精华av午夜在线观看 | 人妻夜夜爽天天爽三区 | 精品一区二区三区波多野结衣 | 亚洲一区二区三区国产精华液 | 亚拍精品一区二区三区探花 | 一本一道久久综合久久 | 熟妇人妻无乱码中文字幕 | 国产特级毛片aaaaaa高潮流水 | 高清国产亚洲精品自在久久 | 精品厕所偷拍各类美女tp嘘嘘 | 狠狠噜狠狠狠狠丁香五月 | 国产精品久久久久影院嫩草 | 欧美人与物videos另类 | 野狼第一精品社区 | 老司机亚洲精品影院无码 | 国产精品第一区揄拍无码 | 国产成人无码一二三区视频 | 4hu四虎永久在线观看 | 国产97在线 | 亚洲 | 亚洲综合无码一区二区三区 | 国产综合久久久久鬼色 | 中文字幕乱码中文乱码51精品 | 久久99精品国产麻豆蜜芽 | 国产乱人无码伦av在线a | 日韩人妻无码一区二区三区久久99 | 最近中文2019字幕第二页 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产小呦泬泬99精品 | 日本熟妇大屁股人妻 | 亚洲精品国产a久久久久久 | 久久精品国产99久久6动漫 | 亚洲精品成人福利网站 | 欧美日韩综合一区二区三区 | 极品嫩模高潮叫床 | 九九综合va免费看 | 国产乱子伦视频在线播放 | 娇妻被黑人粗大高潮白浆 | 国产综合色产在线精品 | 国产综合在线观看 | 亚洲一区二区三区播放 | 美女张开腿让人桶 | 色综合久久久无码网中文 | 亚洲日本在线电影 | 亚洲高清偷拍一区二区三区 | 亚洲成av人片在线观看无码不卡 | 色狠狠av一区二区三区 | 青青青手机频在线观看 | 澳门永久av免费网站 | 亚洲国产成人av在线观看 | 偷窥日本少妇撒尿chinese | 日韩精品无码一本二本三本色 | 国产高清av在线播放 | 男女性色大片免费网站 | 亚洲男女内射在线播放 | 国产人妻人伦精品 | 狠狠色噜噜狠狠狠狠7777米奇 | 成人aaa片一区国产精品 | 国产一区二区三区四区五区加勒比 | 国产精品人人妻人人爽 | 亚洲乱码中文字幕在线 | 日韩欧美成人免费观看 | 高潮毛片无遮挡高清免费视频 | 久久久中文字幕日本无吗 | 伦伦影院午夜理论片 | 国产sm调教视频在线观看 | 爽爽影院免费观看 | 四虎影视成人永久免费观看视频 | 人人妻在人人 | 99久久久国产精品无码免费 | 久久精品人人做人人综合试看 | 粉嫩少妇内射浓精videos | 亚洲gv猛男gv无码男同 | 国内精品九九久久久精品 | 丰满肥臀大屁股熟妇激情视频 | 亚洲成熟女人毛毛耸耸多 | 午夜成人1000部免费视频 | 久久精品人人做人人综合试看 | 国产三级久久久精品麻豆三级 | 狠狠色丁香久久婷婷综合五月 | 国产日产欧产精品精品app | 中文字幕色婷婷在线视频 | 无码免费一区二区三区 | 日本www一道久久久免费榴莲 | 国产绳艺sm调教室论坛 | 久久99精品国产麻豆蜜芽 | 99麻豆久久久国产精品免费 | 国产美女极度色诱视频www | 乌克兰少妇xxxx做受 | 四虎4hu永久免费 | 欧美xxxx黑人又粗又长 | 无码人妻精品一区二区三区不卡 | 亚洲最大成人网站 | 偷窥日本少妇撒尿chinese | 又湿又紧又大又爽a视频国产 | 成人aaa片一区国产精品 | 久久 国产 尿 小便 嘘嘘 | 熟女俱乐部五十路六十路av | 国语精品一区二区三区 | 国产艳妇av在线观看果冻传媒 | 精品国产一区av天美传媒 | 午夜精品久久久内射近拍高清 | 亚洲精品午夜无码电影网 | 人人超人人超碰超国产 | 久久精品女人的天堂av | 好爽又高潮了毛片免费下载 | 日本爽爽爽爽爽爽在线观看免 | 九九在线中文字幕无码 | 亚洲色欲色欲欲www在线 | 国产香蕉尹人综合在线观看 | 成人无码视频免费播放 | 久久国产劲爆∧v内射 | 精品一区二区不卡无码av | 成人精品视频一区二区三区尤物 | 亚洲国产精华液网站w | 亚洲成熟女人毛毛耸耸多 | 天下第一社区视频www日本 | 亚洲日韩一区二区三区 | 精品偷自拍另类在线观看 | 久久综合九色综合97网 | 骚片av蜜桃精品一区 | 国产午夜无码视频在线观看 | 久久久久av无码免费网 | 国产人妻精品一区二区三区 | 免费播放一区二区三区 | 亚洲人成网站免费播放 | 国产九九九九九九九a片 | 大肉大捧一进一出视频出来呀 | 奇米影视888欧美在线观看 | 狠狠噜狠狠狠狠丁香五月 | 国产精品亚洲一区二区三区喷水 | 天堂а√在线地址中文在线 | 精品国产成人一区二区三区 | 国产高清不卡无码视频 | 午夜精品久久久久久久 | 精品无码国产一区二区三区av | 疯狂三人交性欧美 | 国产亚洲精品久久久久久久 | 久久精品一区二区三区四区 | 亚洲欧美日韩成人高清在线一区 | 国产精品毛片一区二区 | 国产人妻精品一区二区三区 | 人人妻人人澡人人爽欧美一区 | 一本色道久久综合狠狠躁 | 帮老师解开蕾丝奶罩吸乳网站 | 国产女主播喷水视频在线观看 | 日本护士毛茸茸高潮 | 天天拍夜夜添久久精品大 | 婷婷色婷婷开心五月四房播播 | 国产亚洲精品久久久久久国模美 | 午夜无码人妻av大片色欲 | 国产成人无码a区在线观看视频app | 国产三级精品三级男人的天堂 | 国产香蕉97碰碰久久人人 | 综合网日日天干夜夜久久 | 国产精品久久久午夜夜伦鲁鲁 | 性色av无码免费一区二区三区 | 国产成人综合色在线观看网站 | 噜噜噜亚洲色成人网站 | 国产精品欧美成人 | 精品国产成人一区二区三区 | 国产绳艺sm调教室论坛 | 国产av一区二区精品久久凹凸 | 97精品国产97久久久久久免费 | 香港三级日本三级妇三级 | 性色av无码免费一区二区三区 | 女人色极品影院 | 天天躁夜夜躁狠狠是什么心态 | 牛和人交xxxx欧美 | 强奷人妻日本中文字幕 | 国产人妻大战黑人第1集 | 国产精品内射视频免费 | 在线天堂新版最新版在线8 | 国内丰满熟女出轨videos | 免费乱码人妻系列无码专区 | 麻豆果冻传媒2021精品传媒一区下载 | 丰满少妇熟乱xxxxx视频 | 久久综合给久久狠狠97色 | 精品国产福利一区二区 | 漂亮人妻洗澡被公强 日日躁 | 欧美日韩在线亚洲综合国产人 | 亚洲 a v无 码免 费 成 人 a v | 国产偷自视频区视频 | 国产成人一区二区三区别 | 国产成人精品无码播放 | 国产一精品一av一免费 | 色爱情人网站 | 成年美女黄网站色大免费全看 | 日产精品高潮呻吟av久久 | 乱人伦人妻中文字幕无码 | 国产香蕉尹人视频在线 | 亚洲 日韩 欧美 成人 在线观看 | 国产精品无码久久av | 久久精品女人的天堂av | 欧美乱妇无乱码大黄a片 | 亚洲综合无码久久精品综合 | 精品水蜜桃久久久久久久 | 性欧美熟妇videofreesex | 国产精品第一区揄拍无码 | 精品国产一区二区三区四区 | 精品国产青草久久久久福利 | 亚洲第一无码av无码专区 | 免费人成在线视频无码 | 久久精品中文字幕一区 | 人人爽人人澡人人人妻 | 国产内射老熟女aaaa | 亚洲精品国偷拍自产在线观看蜜桃 | 四虎永久在线精品免费网址 | 免费看少妇作爱视频 | 帮老师解开蕾丝奶罩吸乳网站 | 无遮挡啪啪摇乳动态图 | 黑人巨大精品欧美一区二区 | 午夜男女很黄的视频 | 欧美阿v高清资源不卡在线播放 | 午夜福利一区二区三区在线观看 | 中文字幕乱码中文乱码51精品 | 亚洲小说春色综合另类 | 精品aⅴ一区二区三区 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产一精品一av一免费 | 无套内射视频囯产 | aⅴ亚洲 日韩 色 图网站 播放 | 国产激情艳情在线看视频 | 久久精品中文字幕大胸 | 精品水蜜桃久久久久久久 | 永久免费观看国产裸体美女 | 中文精品无码中文字幕无码专区 | av香港经典三级级 在线 | 精品国产精品久久一区免费式 | 成人片黄网站色大片免费观看 | 日日天干夜夜狠狠爱 | 无码国产激情在线观看 | 亚洲一区二区三区在线观看网站 | 色婷婷久久一区二区三区麻豆 | 性做久久久久久久免费看 | 欧美一区二区三区 | 亚洲国产av美女网站 | 激情内射日本一区二区三区 | 日韩成人一区二区三区在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 老熟妇乱子伦牲交视频 | 内射白嫩少妇超碰 | 成人欧美一区二区三区 | 国产亚洲欧美在线专区 | 中文毛片无遮挡高清免费 | 噜噜噜亚洲色成人网站 | 无码毛片视频一区二区本码 | 国产人妻人伦精品1国产丝袜 | 国产精品免费大片 | 精品熟女少妇av免费观看 | 亚洲国产午夜精品理论片 | 动漫av一区二区在线观看 | aa片在线观看视频在线播放 | 1000部夫妻午夜免费 | 久久这里只有精品视频9 | 欧美丰满少妇xxxx性 | 国产人妖乱国产精品人妖 | 麻豆精产国品 | 波多野结衣高清一区二区三区 | 无码福利日韩神码福利片 | www国产精品内射老师 | 中文字幕av日韩精品一区二区 | 成人一区二区免费视频 | 久久伊人色av天堂九九小黄鸭 | 图片小说视频一区二区 | 精品亚洲韩国一区二区三区 | 国产猛烈高潮尖叫视频免费 | 暴力强奷在线播放无码 | 国产精品爱久久久久久久 | 四虎4hu永久免费 | 欧美国产日韩久久mv | 欧美午夜特黄aaaaaa片 | 男女下面进入的视频免费午夜 | 性欧美大战久久久久久久 | 精品偷拍一区二区三区在线看 | 国产精品欧美成人 | 99国产欧美久久久精品 | 欧美亚洲国产一区二区三区 | 婷婷丁香六月激情综合啪 | √8天堂资源地址中文在线 | 无码人妻精品一区二区三区不卡 | 久久久久av无码免费网 | 丁香花在线影院观看在线播放 | 动漫av一区二区在线观看 | 日韩av无码中文无码电影 | 精品人妻中文字幕有码在线 | 免费乱码人妻系列无码专区 | 国产午夜视频在线观看 | 少妇性俱乐部纵欲狂欢电影 | 国产亚洲精品精品国产亚洲综合 | 丁香花在线影院观看在线播放 | 少妇性l交大片欧洲热妇乱xxx | 老头边吃奶边弄进去呻吟 | 色婷婷综合激情综在线播放 | 欧美老人巨大xxxx做受 | 色情久久久av熟女人妻网站 | 18禁黄网站男男禁片免费观看 | 国产精品久久久久7777 | 日本又色又爽又黄的a片18禁 | 成人无码视频在线观看网站 | 曰本女人与公拘交酡免费视频 | 在线欧美精品一区二区三区 | 男人扒开女人内裤强吻桶进去 | 任你躁在线精品免费 | 人人超人人超碰超国产 | 夜夜躁日日躁狠狠久久av | 最新版天堂资源中文官网 | 色综合久久久久综合一本到桃花网 | 久久天天躁夜夜躁狠狠 | 内射巨臀欧美在线视频 | 国产极品美女高潮无套在线观看 | 久久99久久99精品中文字幕 | 久久精品国产一区二区三区 | 国产手机在线αⅴ片无码观看 | 久久久精品国产sm最大网站 | 又大又黄又粗又爽的免费视频 | 中文字幕日韩精品一区二区三区 | 超碰97人人做人人爱少妇 | 露脸叫床粗话东北少妇 | 欧美亚洲日韩国产人成在线播放 | 草草网站影院白丝内射 | 婷婷色婷婷开心五月四房播播 | 大地资源网第二页免费观看 | av香港经典三级级 在线 | 最近中文2019字幕第二页 | 特黄特色大片免费播放器图片 | 久久99精品久久久久婷婷 | 久久久久久a亚洲欧洲av冫 | 色综合天天综合狠狠爱 | 性啪啪chinese东北女人 | 国产精品无码一区二区三区不卡 | 无码成人精品区在线观看 | 午夜肉伦伦影院 | 久久精品视频在线看15 | 偷窥日本少妇撒尿chinese | 久久无码专区国产精品s | 久久精品女人的天堂av | 亚洲另类伦春色综合小说 | 国产偷自视频区视频 | 少妇愉情理伦片bd | 在线精品亚洲一区二区 | 免费人成网站视频在线观看 | 亚洲精品鲁一鲁一区二区三区 | 九九久久精品国产免费看小说 | 国产在热线精品视频 | 久久午夜无码鲁丝片秋霞 | 黑人大群体交免费视频 | 精品一二三区久久aaa片 | 久久国产精品二国产精品 | 国产乱人伦av在线无码 | 无遮无挡爽爽免费视频 | 久久伊人色av天堂九九小黄鸭 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲国产av精品一区二区蜜芽 | 亚洲国产高清在线观看视频 | 国产精品久久精品三级 | 久久人人97超碰a片精品 | 久久国内精品自在自线 | 亚洲精品美女久久久久久久 | 最新国产乱人伦偷精品免费网站 | 精品无码国产自产拍在线观看蜜 | 国产成人精品三级麻豆 | 欧美人与动性行为视频 | 国产色精品久久人妻 | 国产九九九九九九九a片 | 一二三四在线观看免费视频 | 撕开奶罩揉吮奶头视频 | 色综合久久久无码中文字幕 | 精品久久久无码中文字幕 | 人妻无码αv中文字幕久久琪琪布 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品国产精品乱码不卡 | 国产九九九九九九九a片 | 国产日产欧产精品精品app | 亚洲日韩av一区二区三区中文 |