回到目录

Polly是一个开源框架,在github上可以找到,被善友大哥收录,也是.App vNext的一员!

App vNext:https://github.com/App-vNext

GitHub:https://github.com/App-vNext/Polly

NanoFabric是一个开源的微服务架构,也是善友大哥推荐的:https://github.com/geffzhang/NanoFabric

对于NanoFabric来说,它集成了很多.net core开源项目,其中包括了Consul + .NET Core + Polly + Ocelot + Exceptionless + IdentityServer,你是否闻到了某种味道!

Polly给我们带来了什么

  1. 对http请求提供重试机制
  2. 对指定异常进行特殊的处理
  3. 提供了多种策略

程序中的使用

封装一个方法,对外提供一个委托的参数,把需要进行polly的代码段输入进来即可,对于http,数据库,网络通讯等非常必要,因为这些场景可能存在不稳定的因素!polly正好可以帮我们非常

友好的解决它,下面的代码主要实现了对所有异常的跟踪,然后每1秒重新执行一次,可以重试5次!

        /// <summary>
/// polly重试机制
/// </summary>
private static HttpResponseMessage retryTwoTimesPolicy(Func<HttpResponseMessage> action)
{
var policy = Policy
.Handle<Exception>()
.WaitAndRetry(
,
retryAttempt => TimeSpan.FromSeconds(Math.Pow(, retryAttempt)),
(ex, timer, c, i) =>
{
logger.Logger_Info($"执行失败! 重试次数 {c}");
logger.Logger_Info($"异常来自 {ex.GetType().Name}");
});
return policy.Execute(action);
}

我们之前的httpHelper请求对象,也可以引入polly机制,全局进行控制!

        /// <summary>
/// GET请求
/// </summary>
/// <param name="requestUri">服务地址</param>
/// <param name="nv">参数键值</param>
/// <returns></returns>
public static HttpResponseMessage Get(
string requestUri,
NameValueCollection nv)
{
try
{ return retryTwoTimesPolicy(() =>
{
var result = httpClient.GetAsync(GeneratorUri(requestUri, nv)).Result;
UnGZip(result);
return result;
});
}
catch (Exception ex)
{
throw ex;
}
}

自己开两个api进程,一个是对外提供服务,别一个作为主服务器,被其它进行访问,当它挂了之后,其实进行可以通过polly进行重试!

感谢各位的阅读!

微服务来了,但需要我们关注的点多了!

奋斗吧!

回到目录

LindDotNetCore~Polly组件对微服务场景的价值的更多相关文章

  1. CI Weekly #11 | 微服务场景下的自动化测试与持续部署

    又一周过去了,最近我们的工程师正在搞一个"大事情" --「[flow.ci](http://flow.ci/?utm_source=bokeyuan&utm_medium= ...

  2. TOP100summit:【分享实录-华为】微服务场景下的性能提升最佳实践

    本篇文章内容来自2016年TOP100summit华为架构部资深架构师王启军的案例分享.编辑:Cynthia 王启军:华为架构部资深架构师.负责华为的云化.微服务架构推进落地,前后参与了华为手机祥云4 ...

  3. .NET Core 中的 Swagger 应用与微服务场景下的Swagger Api 集成显示

    Swagger 与 OpenAPI 的历史来源: Swagger 项目于 2015 年捐赠给 OpenAPI Initiative,此后被称为 OpenAPI.这两个名称可以互换使用.但是," ...

  4. TZ_13_微服务场景Eureka

    1.搭建Eureka的注册中心 1.1Eureka几个时间间隔配置详解 1 >客户端信息上报到eureka服务的时间周期,配置的值越小,上报越频繁,eureka服务器应用状态管理一致性越高 #客 ...

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

    在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...

  6. 【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign

    上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使 ...

  7. Node.js微服务实践(一)

    什么是微服务 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任务.在所有情况下 ...

  8. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  9. iUAP云运维平台v3.0全面支持基于K8s的微服务架构

    什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...

随机推荐

  1. lodash源码分析之自减的两种形式

    这个世界需要一个特定的恶人,可以供人们指名道姓,千夫所指:"全都怪你". --村上春树<当我谈跑步时我谈些什么> 本文为读 lodash 源码的第六篇,后续文章会更新到 ...

  2. Java 测试驱动开发--“井字游戏” 游戏实战

    TDD 介绍 TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前,先编写单元测试用 ...

  3. python 中文编码

    import sys sys.setdefaultencoding('utf-8') 保存为:sitecustomize.py 将文件放至: /Library/Frameworks/Python.fr ...

  4. 登陆模块的进化史,带大家回顾java学习历程(一)

    一直在想着写点特别点的东西,让有兴趣学编程的人确实能学到点干货,今天就来随意写写. 大家在网上查找资料看到最多的demo估计就是登陆功能的演示了,为何大家偏爱拿登陆来做demo呢?因为行业应用类程序的 ...

  5. [转]python变量作用域的有趣差别

    func()里 可以访问全局变量i,但不能给i重新赋值. i = 1 def func(): print( i + 1) func() # 2 用global声明后,可以给i重新赋值. i = 1 d ...

  6. kafka Topic 与 Partition

    Topic在逻辑上可以被认为是一个queue队列,每条消息都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里.为 了使得Kafka的吞吐率可以水平扩展,物理上把topic分 ...

  7. asp.net core 配置

    ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML配置文件web.config,现在支持各种格式的配置,比以前灵活 ...

  8. hackerrank Ticket

    传送门 题意:n个人排队买票,要把他们拆成k条队到k个窗口买,可以有队伍为空,每条队的顺序保持拆之前的顺序.如果某人和他前一个人买的票相同,就可以打八折,求最小花费. 题解:拆成k条队意味着只有[n- ...

  9. 基于Windows下python3.4.1IDLE常用快捷键小结

    安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.ALT ...

  10. 【Java学习笔记之六】java三种循环(for,while,do......while)的使用方法及区别

    第一种:for循环 循环结构for语句的格式:       for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体;    } eg: class Dome_For2{ public st ...