Tag: polly

Polly政策应该是单身吗?

我有一个查询, IGetHamburgers ,它调用外部API。 我在我的DI容器中注册了IGetHamburgers的实现,作为Singleton。 我使用Polly作为断路器,如果两个请求失败,电路将打开。 我的目标是所有对Hamburger api的调用应该通过相同的断路器,如果GetHamburgers失败,那么所有其他调用也应该失败。 我该如何使用我的保单? 我应该将我的政策注册为如下字段: private Policy _policy; private Policy Policy { get { if(this_policy != null) { return this_policy; } this._policy = Policy .Handle() .CircuitBreaker(2, TimeSpan.FromMinutes(1)); return this._policy; } } public object Execute(…….) { return Policy.Execute(() => this.hamburgerQuery.GetHamburgers()); } 要么 public object Execute(…….) { var breaker = Policy .Handle() .CircuitBreaker(2, […]

使用Polly时VS Debugger中报告的exceptionUser-Unhandled

在调用Pittney Bowes Geocoder服务时,我正在使用Polly来捕捉exception。 我正在使用一个抛出MessageProcessingException的g1client库。 如果抛出此exception,我已将调用包装在Polly网络策略中以重试调用最多3次,但Visual Studio坚持exception为“User-Unhandled”我需要修改哪些内容才能处理此exception? 我正在使用Visual Studio 2017社区版和C#4.6.1。 try { var networkPolicy = Policy .Handle() .Or() .WaitAndRetry( 3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception, timeSpan, context) => { System.Diagnostics.Debug.WriteLine(“Exception being retried” + exception); }); geocoderResponse = networkPolicy.Execute(() => geocoderService.Process(geocoderRequest)); } catch (MessageProcessingException ex) { log.Error(“MessageProcessingException calling the Geocoder service”, ex); throw ex; } catch (Exception […]

在将策略定义与执行分离时,了解Polly策略的语义

对于Polly,我想将我的策略定义和该策略的执行分为两个不同的语句,如: // Policy definition var policy = Policy .HandleResult(predicate) .Retry(2); // Policy execution policy.ExecuteAndCapture(() => { DoSomethingAndReturnAnIRestResponse(); }; 我想这样做,所以我可以更好地重用我的重试策略,例如用于dependency injection。 我试图了解在以这种方式拆分策略和执行时是否有任何考虑因素,例如,如果存在任何可能未从策略定义到policy对象的“状态”(缺少更好的术语)执行。 沿着这些思路,我注意到当我以上述方式使用Polly的ExecuteAndCapture()时,某些属性(与捕获与ExecuteAndCapture()相关联的最终exception/结果相关的属性)未显示在policy对象上。 根据文档( 此处和此处 ),完成以下政策后: var policy = Policy .HandleResult(predicate) .Retry(2) .ExecuteAndCapture(() => { DoSomethingAndReturnAnIRestResponse(); }); ……你应该回来: PolicyResult.Outcome PolicyResult.FinalException PolicyResult.ExceptionType PolicyResult.Result 确实发生这种情况,然后ExecuteAndCapture()与策略定义在同一语句中。 但是,在将策略定义与执行分离时,这些属性不可用。 我天真地认为他们会出现在现有的policy对象上,但他们没有: 看来我需要创建一个新的变量赋值才能访问这些属性: 有什么顾虑吗?

Polly断路器模式 – 用于测试连接线

我正在尝试使用Polly测试连接字符串是否为null。 如果它为null,我想使用CircuitBreaker尝试三次,并且应该在Console窗口中输出消息。 Policy policy = null; // Break the circuit after the specified number of exceptions // and keep circuit broken for the specified duration. policy = Policy .Handle() .CircuitBreaker(3, TimeSpan.FromSeconds(30)); try { string connected = policy.Execute(() => repository.GetConnectionString()); } catch (Exception ex) { Console.WriteLine(“{0}”,ex.Message); } 和GetConnectionString方法是: public string GetConnectionString() { SqlConnection conn = new […]