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

![创建 ASP.NET Core Web API 订单](/Users/zouding/文档/blog/文章/如何使用polly/

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

)

创建项目后,默认的 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 方法,该方法根据输入的客户代码返回详细的订单。此方法还将对客户服务进行 HTTP 调用以获取客户代码的客户名称。

让我们首先在依赖容器中添加 httpclient 服务,以便我们可以在订单控制器中获取该对象 httpclient 以对客户服务进行 HTTP 调用。要在依赖容器中添加 httpclient 服务,请将以下行添加到 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 – 是客户服务的 URL(主机和端口号)

出于演示目的,我对订单详细信息进行了硬编码,即所有客户的相同订单详细信息,但理想情况下,这些数据应该来自使用实体框架的数据库。

使用 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>(); });

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxzzp.html