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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# DotNetty

对于 .NET 开发者来说&#xff0c;DotNetty 是一个开源、高性能的网络库&#xff0c;它是对 Java 平台上流行的 Netty 异步事件驱动网络应用程序框架的一个端口。DotNetty 适用于创建各种网络应用程序&#xff0c;如 IoT (物联网)、游戏服务器以及消息传递系统等。 以下是对 Do…

Redis之缓存击穿问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 单例双检锁2. 缓存预热和定时任务 一、书接上文 Redis之缓存雪崩问题解决方案 二、介绍 缓存击穿就是大量并发访问同一个热点数据&#xff0c;一旦这个热点数据缓存失效&#xff0c;则请求压力都来到数据库。 三、解决方案 1…

Redis命令和Redisson对象匹配列表

大家好&#xff0c;Redisson系列再发一文。 多克创新国庆福利继续发&#xff0c;有需要的可以前往官网了解详情&#xff01;&#xff01;&#xff01; Redis命令Redisson对象方法AUTHConfig.setPassword();APPENDRBinaryStream.getOutputStream().write()BITCOUNTRBitSet.ca…

嵌入式Qt 计算器核心算法_1

一.表达式分离算法分析 二.分离算法实现 QCalculatorDec.cpp #include "QCalculatorDec.h"#include <QDebug>QCalculatorDec::QCalculatorDec() {m_exp "";m_result "";QQueue<QString> r split("9.11 ( -3 - 1 ) * -5 &…

C#,整数转为短字符串(Short string)的加解密算法与源代码

1 整数转为短字符串的应用 网站生成的动态 URL 往往以内容序列号id为标识与参数&#xff0c;比如&#xff1a; http://www.jerry.com/tom.aspx?id1 使用 Web Rewrite&#xff0c;可以实现网页静态化&#xff0c;称为&#xff1a; http://www.jerry.com/content/1.html 对…

数学家的趣闻轶事15则

目录 前言趣闻轶事15则参考文献 前言 有人的地方就有江湖&#xff0c;有江湖的地方就有故事。数学本身就是一个江湖&#xff0c;这个江湖也充满着血雨腥风和侠骨柔情&#xff0c;至今流传着各种各样的传说&#xff0c;其中不乏”马踏江湖潇潇事“&#xff0c;也有"何当共…

Centos安装图形化桌面环境

1.使用root远程登录最小化安装的虚拟机 2.执行命令yum groupinstall "X Window System" 这是安装窗口系统 3.执行命令yum grouplist" 检查安装的软件可可以安装的软件 4.执行命令yum groupinstall "Server with GUI" 这是安装图形化界面 5.执行命令sy…

抛弃chatgpt,使用微软的Cursor提升coding效率

Whats Cursor? Cursor编辑器是一个基于GPT-4的代码编辑器&#xff0c;它可以根据用户的自然语言指令或者正在编辑的代码上下文为用户提供代码建议&#xff0c;支持多种编程语言&#xff0c;如Python、Java、C/C#、go等。Cursor编辑器还可以帮助用户重构、理解和优化代码&…

Mybatisplus 传参参数为自定义sql, 使用条件构造器作为参数

1 pom依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> </dependency> 2 mapper 接口文件 List<TBookOrder> searchDiy(Param(Const…

centos docker jenkins 日志

在 CentOS 系统上运行 Docker 容器中的 Jenkins&#xff0c;查看日志的方法如下&#xff1a; 实时查看 Jenkins 容器的日志&#xff1a; 可以使用 docker logs 命令实时查看 Jenkins 容器的输出日志。 docker logs -f <jenkins_container_name_or_id>-f 参数表示跟随&…

P1605 迷宫

题目传送门&#xff1a;P1605 迷宫 前言 dfs迷宫题&#xff0c;是一道很好的练手模板题 这道题一定要回溯&#xff01;回溯&#xff01;&#xff01; 代码 #include<bits/stdc.h> using namespace std; int n,m,t; int sx,sy,fx,fy; int lx,ly; int a[10][10]{0},ans…

字符串变换最小字符串(C语言)

题目描述 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串&#xff08;按照字典序进行比较&#xff09;。 变换规则&#xff1a;交换字符串中任意两个不同位置的字符。 输入描述 一串小写字母组成的字符串s 输出描述 按照要求…

ADO.NET查询返回单个值

在ADO.NET中&#xff0c;如果你想要执行一个查询并返回单个值&#xff08;例如&#xff0c;一个聚合函数的结果或一个唯一记录的某个字段值&#xff09;&#xff0c;你可以使用SqlCommand对象的ExecuteScalar方法。ExecuteScalar方法返回查询结果集中的第一行的第一列的值&…

国内最全的AIGC大模型软件都是免费的,不比chatgpt香吗?我都为你准备好了,又可以提前下班了

无极低码 &#xff1a;https://wheart.cn 豆包(云雀大模型)、文心一言、悟空、星火、百度文库、360智脑、天宫AI、智谱清言(GLM大模型)、百川模型(百川智能)、日日新(商汤)、上海人工智能实验室&#xff08;书生通用大模型&#xff09;、夸克。 国内最全的AIGC大模型软件都是…

mysql 2-21

约束的分类 添加约束 查看表约束 非空约束 唯一性约束 复合的唯一性约束 只要有一个字段不重复&#xff0c;就可以添加成功 主键约束 自增列 mysql 8.0具有持久化&#xff0c;重启服务器会继续自增 外键约束 创建外键 关联必须有唯一性约束&#xff0c;或者是主键 约束等级 …

MySQL篇之undo log和redo log

一、持久化时服务器宕机 缓冲池&#xff08;buffer pool&#xff09;: 主内存中的一个区域&#xff0c;里面可以缓存磁盘上经常操作的真实数据&#xff0c;在执行增删改查操作时&#xff0c;先操作缓冲池中的数据&#xff08;若缓冲池没有数据&#xff0c;则从磁盘加载并缓存&a…

Python科学计算:SymPy、Numba与SciPy库

Python在科学计算领域的应用非常广泛&#xff0c;其中SymPy、Numba和SciPy是三个常用的库。这些库各自有不同的特点和应用场景。 SymPy SymPy是一个Python的库&#xff0c;用于进行符号数学计算。它允许你进行符号计算&#xff0c;如代数、微积分、离散数学、量子力学、统计学…

jsx语言和js语言的区别

JSX 是 JavaScript 的一种语法扩展&#xff0c;它允许在 JavaScript 代码中直接编写类似 HTML 的标记&#xff0c;用于描述用户界面的结构。JSX 最常用于 React 应用程序中&#xff0c;但也可以与其他框架或库一起使用。 下面是 JSX 和普通 JavaScript 的一些区别&#xff1a;…

C++面试:TCP和UDP的基本原理http协议基础与应用http协议相关知识

目录 TCP和UDP的基本原理 TCP (传输控制协议) UDP (用户数据报协议) 应用场景 TCP可靠传输机制 TCP协议的流量控制和拥塞控制 TCP流量控制 TCP拥塞控制 区别 Session、Cookie 与 Application 1. Cookie 2. Session 3. Application 比较 http1.0、http2.0、http…

我是如何从功能测试成功转岗测试开发的?记录下我的面试经验

由于这段时间我面试了很多家公司&#xff0c;也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助&#xff0c;也希望能帮助到正在找工作的你。 一 找工作 壹&#xff0f; 我们总是草率地进入一个自己不了解…