polly

[Abp vNext 源码分析]

*爱你&永不变心* 提交于 2020-08-04 19:30:21
一、简介 ABP vNext 在 v 2.9.x 版本当中添加了 BLOB 系统,主要用于存储大型二进制文件。ABP 抽象了一套通用的 BLOB 体系,开发人员在存储或读取二进制文件时,可以忽略具体实现,直接使用 IBlobContainer 或 IBlobContainer<T> 进行操作。官方的 BLOB Provider 实现有 Azure 、 AWS 、 FileSystem(文件系统存储) 、 Database(数据库存储) 、 阿里云 OSS ,你也可以自己继承 BlobProviderBase 来实现其他的 Provider。 BLOB 常用于各类二进制文件存储和管理,基本就是对云服务的 OSS 进行了抽象,在使用当中也会有 Bucket 和 Object Key 的概念,在 BLOB 里面对应的就是 ContainerName 和 BlobName。 关于 BLOB 的官方使用指南,可以参考 https://docs.abp.io/en/abp/latest/Blob-Storing ,本文的阅读前提是建立在你已经阅读过该指南,并有一定的使用经验。 二、源码分析 2.1 模块分析 看一个 ABP 的库项目,首先从他的 Module 入手,对应的 BLOB 核心库的 Module 就是 AbpBlobStoringModule 类,在其内部,只进行了两个操作,注入了

HttpClient Polly WaitAndRetry policy

流过昼夜 提交于 2020-07-21 03:09:26
问题 Anyone have any idea on why the policy below stop retry after 3 times instead of 10 ? IAsyncPolicy<HttpResponseMessage> httpWaitAndRetryPolicy = Policy.HandleResult<HttpResponseMessage>(r => !r.IsSuccessStatusCode) .OrHandle<Exception>(r => true) .WaitAndRetryAsync(10, retryAttempt => TimeSpan.FromSeconds(2)); I set the retry attempt to 10 and test the http post call with BadRequest failure. But it only retry 3 times and then stopped until timeout and threw exception ----> System.Threading

Testing Polly retry policy with moq

独自空忆成欢 提交于 2020-06-27 14:47:52
问题 I'm trying to write a unit test for polly, but it looks like the return is cached. Method PostAsyncWithRetry: using Polly; using System; using System.Diagnostics; using System.Net.Cache; using System.Net.Http; public class RetryClient { private HttpClient httpClient = new HttpClient(new WebRequestHandler() { CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore) }); public HttpResponseMessage PostAsyncWithRetry( String url, String path, StringContent httpContent) {

How to limit number of async IO tasks to database?

安稳与你 提交于 2020-06-11 12:55:55
问题 I have a list of id's and I want to get data for each of those id in parallel from database. My below ExecuteAsync method is called at very high throughput and for each request we have around 500 ids for which I need to extract data. So I have got below code where I am looping around list of ids and making async calls for each of those id in parallel and it works fine. private async Task<List<T>> ExecuteAsync<T>(IList<int> ids, IPollyPolicy policy, Func<CancellationToken, int, Task<T>> mapper

How to limit number of async IO tasks to database?

不羁的心 提交于 2020-06-11 12:53:40
问题 I have a list of id's and I want to get data for each of those id in parallel from database. My below ExecuteAsync method is called at very high throughput and for each request we have around 500 ids for which I need to extract data. So I have got below code where I am looping around list of ids and making async calls for each of those id in parallel and it works fine. private async Task<List<T>> ExecuteAsync<T>(IList<int> ids, IPollyPolicy policy, Func<CancellationToken, int, Task<T>> mapper

上周热点回顾(10.1-10.7)

给你一囗甜甜゛ 提交于 2020-05-02 01:06:09
热点随笔: · .NET 开源项目 Polly 介绍 ( Liam Wang ) · .Net Core中的Api版本控制 ( LamondLu ) · TCP协议学习总结(上) ( wc的一些事一些情 ) · Jenkins pipeline 并行执行任务流 ( sparkdev ) · 一文搞懂:词法作用域、动态作用域、回调函数、闭包 ( 骏马金龙 ) · 为什么程序员需要知道互联网行业发展史 ( kid551 ) · 用CSS实现一个抽奖转盘 ( wenr ) · 大数据不就是写sql吗? ( 大叔据 ) · .NET微服务调查结果 ( 张善友 ) · 工作五年总结——以及两年前曾提出问题的回答 ( 受戒人 ) · 我是如何学习数据结构与算法的? ( 帅地 ) · 在国企的日子(序言) ( 心灵之火 ) 热点新闻: · 腾讯员工离职忠告:离开大公司 我才知道世界有多坏 · 可怕!29岁小伙心脏血管犹如豆腐渣!只因这个习惯 · 彭博社曝光的“间谍芯片” 我在淘宝1块钱就能买一个 · 这15张图能教给你的东西,比读完100本书还多 · 一天内让两位名人去世,这种病是“癌症之王” · 怎样的物理学天才 让诺贝尔奖破例为他改了颁奖地点 · 杭州,AI时代的第一个城市“牺牲品” · 贾跃亭提起仲裁欲踢恒大出局 花光8亿美元再要7个亿 · 微软开源基于模型的机器学习框架Infer.NET

ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理

做~自己de王妃 提交于 2020-04-26 12:23:49
原文:https://www.stevejgordon.co.uk/httpclientfactory-using-polly-for-transient-fault-handling 发表于:2018年6月 在本系列的上一篇文章中,我介绍了使用命名和类型客户端注册的DelegatingHandlers的传出中间件的概念。尽管可以使用该方法,但ASP.NET团队希望在大多数情况下,我们无需手动构建自己的处理程序。在某些情况下,库的内置功能可能会提供我们需要的功能。例如,有时将请求包装在时序代码中以跟踪它们执行所需的时间有时会很有用。现在,它已作为默认日志记录的一部分内置到IHttpClientFactory中。在其他情况下,第三方集成可能会提供您所需的功能。例如,基于横切面的思想,在HTTP请求期间处理瞬态故障。在这种情况下,与其制作自己的重试逻辑,不如使用Polly之类的库。 Polly是一个流行的瞬态故障处理库,它提供了一种机制来定义在发生某些故障时可以应用的策略。重试策略是最常用的策略之一。您可以封装一些代码,如果发生故障,将重试这些代码,有时需要多次重试。这在您的应用程序需要与外部服务进行通信的情况下非常有用。通过HTTP之类的传输工具与服务进行通信时,始终存在瞬态故障的风险。暂时性故障可能会阻止您的请求完成,但也可能是暂时的问题。在这种情况下,使用重试是明智的选择。

ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理

早过忘川 提交于 2020-04-26 11:37:20
原文:https://www.stevejgordon.co.uk/httpclientfactory-using-polly-for-transient-fault-handling 发表于:2018年6月 在本系列的上一篇文章中,我介绍了使用命名和类型客户端注册的DelegatingHandlers的传出中间件的概念。尽管可以使用该方法,但ASP.NET团队希望在大多数情况下,我们无需手动构建自己的处理程序。在某些情况下,库的内置功能可能会提供我们需要的功能。例如,有时将请求包装在时序代码中以跟踪它们执行所需的时间有时会很有用。现在,它已作为默认日志记录的一部分内置到IHttpClientFactory中。在其他情况下,第三方集成可能会提供您所需的功能。例如,基于横切面的思想,在HTTP请求期间处理瞬态故障。在这种情况下,与其制作自己的重试逻辑,不如使用Polly之类的库。 Polly是一个流行的瞬态故障处理库,它提供了一种机制来定义在发生某些故障时可以应用的策略。重试策略是最常用的策略之一。您可以封装一些代码,如果发生故障,将重试这些代码,有时需要多次重试。这在您的应用程序需要与外部服务进行通信的情况下非常有用。通过HTTP之类的传输工具与服务进行通信时,始终存在瞬态故障的风险。暂时性故障可能会阻止您的请求完成,但也可能是暂时的问题。在这种情况下,使用重试是明智的选择。

eShopOnContainers 知多少[4]:Catalog microservice

我的未来我决定 提交于 2020-04-22 07:21:48
引言 Catalog microservice(目录微服务)维护着所有产品信息,包括库存、价格。所以该微服务的核心业务为: 产品信息的维护 库存的更新 价格的维护 架构模式 如上图所示,本微服务采用简单的数据驱动的CRUD微服务架构,来执行产品信息的创建、读取、更新和删除(CRUD)操作。 这种类型的服务在单个 ASP.NET Core Web API 项目中即可实现所有功能,该项目包括数据模型类、业务逻辑类及其数据访问类。其项目结构如下: 核心技术选型: ASP.NET Core Web API Entity Framework Core SQL Server Swashbuckle(可选) Autofac Eventbus Polly 实体建模 该微服务的核心领域实体是商品,其类图如下: 对于实体这一块,有两个小知识点需要说明一下: 进行数据库字段映射时,主键都使用了 ForSqlServerUseSequenceHiLo 指定使用 HI-LO 高低位序列进行主键生成。 使用NoTracking提升查询速度 在 CatalogController 的构造方法中,明确指定以下代码来进行查询优化,这一点也是我们值得学习的地方。 ((DbContext)context).ChangeTracker.QueryTrackingBehavior =

HttpClient在.NET Core中的正确打开方式

…衆ロ難τιáo~ 提交于 2020-04-21 05:21:07
问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await httpClient.GetAsync(uri); //do something with response } 这段代码理论上来说遵守了C#的最佳实践,HttpClient是IDisposable类型,所以我们通过using语法糖来使用HttpClient。微软官方的文档也提到: As a rule, when you use an IDisposable object, you should declare and instantiate it in a using statement 可是,当我们试图运行下面的测试: public async Task SendRequest() { Console.WriteLine("Starting reqeust"); for(int i = 0; i<10; i++) { using(var client = new HttpClient()) { var result = await client.GetAsync("http://www.baidu.com"); Console.WriteLine(result.StatusCode