1. 概要
实验服务保护,自动重新连接功能。
2.代码
2.1 重复工具
using Polly;
using Polly.Retry;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;namespace WebApplication2
{public class ClientPolicy{public AsyncRetryPolicy<HttpResponseMessage> asyncRetryPolicy { get; set; } public ClientPolicy(){asyncRetryPolicy = Policy.HandleResult<HttpResponseMessage>(p=>!p.IsSuccessStatusCode).WaitAndRetryAsync(5,retryAttemp=>TimeSpan.FromSeconds(Math.Pow(2,retryAttemp)));}}
}
2.2 调用位置
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;namespace WebApplication2.Controllers
{[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger){_logger = logger;}[HttpGet]public IEnumerable<WeatherForecast> Get(){var rng = new Random();ClientPolicy clientPolicy = new ClientPolicy();HttpClient httpClient = new HttpClient();clientPolicy.asyncRetryPolicy.ExecuteAsync(() => httpClient.GetAsync($"https://localhost:44367/test"));return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = rng.Next(-20, 55),Summary = Summaries[rng.Next(Summaries.Length)]}).ToArray();}[HttpGet("/test")]public IActionResult test(){var randomNumber = new Random().Next(1, 100);if(randomNumber > 20){//Console.WriteLine("请求成功 200");//return Ok("请求成功");}Console.WriteLine("请求失败");return BadRequest("请求失败");}}
}
2.实验结果
如果失败下面的函数会重复调用5次
[HttpGet("/test")]public IActionResult test(){var randomNumber = new Random().Next(1, 100);if(randomNumber > 20){//Console.WriteLine("请求成功 200");//return Ok("请求成功");}Console.WriteLine("请求失败");return BadRequest("请求失败");}