当前位置: 首页 > news >正文

.net 微服务 服务保护 自动重试 Polly

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("请求失败");}

相关文章:

  • Java 面向对象进阶 10 多态中调用成员的特点(黑马)
  • 代码随想录刷题第38天
  • Docker中如何删除某个镜像
  • 【微服务生态】Docker
  • 洛谷 P3879 阅读理解
  • 重学Java 18.学生管理系统项目
  • Windows 获取内存 API 汇总及使用方法
  • Python编程技巧 – 装饰器
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO
  • 深入理解java虚拟机---自动内存管理
  • 一.重新回炉Spring Framework: 理解Spring IoC
  • Python第十九章(模块)
  • PyCharm 新建目录 (directory or folder)
  • JavaScript 设计模式之组合模式
  • ubuntu 22.04 图文安装
  • [译]Python中的类属性与实例属性的区别
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CSS实用技巧
  • express.js的介绍及使用
  • gulp 教程
  • hadoop集群管理系统搭建规划说明
  • java多线程
  • JS函数式编程 数组部分风格 ES6版
  • js作用域和this的理解
  • linux学习笔记
  • miaov-React 最佳入门
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 机器学习 vs. 深度学习
  • 基于 Babel 的 npm 包最小化设置
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记一次删除Git记录中的大文件的过程
  • 技术发展面试
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何解决微信端直接跳WAP端
  • 使用API自动生成工具优化前端工作流
  • 以太坊客户端Geth命令参数详解
  • 因为阿里,他们成了“杭漂”
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • # C++之functional库用法整理
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (多级缓存)缓存同步
  • (附源码)计算机毕业设计大学生兼职系统
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net Signalr 使用笔记
  • .net web项目 调用webService
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET程序员迈向卓越的必由之路
  • .NET学习教程二——.net基础定义+VS常用设置
  • .php文件都打不开,打不开php文件怎么办
  • @Autowired多个相同类型bean装配问题