当前位置: 首页 > 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 图文安装
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Android 架构优化~MVP 架构改造
  • C++入门教程(10):for 语句
  • centos安装java运行环境jdk+tomcat
  • Flex布局到底解决了什么问题
  • JAVA 学习IO流
  • Java编程基础24——递归练习
  • Python进阶细节
  • rc-form之最单纯情况
  • React as a UI Runtime(五、列表)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 第十八天-企业应用架构模式-基本模式
  • 仿天猫超市收藏抛物线动画工具库
  • 给Prometheus造假数据的方法
  • 聊聊flink的TableFactory
  • 爬虫模拟登陆 SegmentFault
  • 前端性能优化——回流与重绘
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 实习面试笔记
  • 学习ES6 变量的解构赋值
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #android不同版本废弃api,新api。
  • #WEB前端(HTML属性)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (办公)springboot配置aop处理请求.
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十三)Maven插件解析运行机制
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (译) 函数式 JS #1:简介
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ./configure,make,make install的作用(转)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net 代码性能 - (1)