我是否应该通过Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling重试

时间:2018-10-29 11:30:28

标签: azureservicebus azure-servicebus-topics

我有一些旧代码,使用EnterpriseLibrary.TransientFaultHandling包对Azure服务总线主题进行了重试:

 <form class="form-horizontal form-label-left"method="POST" action="{% url 'paperCustomization_submission'%}">


                   <div class="col-md-7 col-sm-9 col-xs-12">
                       {%for question_type in questions_type%}
                         <div class="checkbox" id="checkbox-question" >
                                    <label>
                     <input type="checkbox" id="question_type_id" value="{{question_type.question_type}}" onclick="function1();"class="flat" name="checkbox_question"> {{question_type.question_type}}
                                    </label>

                                </div>
                                {%endfor%}
                              </div>

该代码是几年前编写的,可能摘自博客文章或某些Microsoft文档。在检查当今的var bus = TopicClient.CreateFromConnectionString(con, topic); await new RetryPolicy<ServiceBusTransientErrorDetectionStrategy>( new FixedInterval(3, TimeSpan.FromMilliseconds(200))) .ExecuteAsync(() => await bus.SendAsync(msg) ... 时,它包含一个名为TopicClient的属性,默认情况下将其设置为RetryPolicy的实例,并具有重试次数,最大超时等默认值。< / p>

在我看来,RetryExponential上的默认重试策略看起来不错。使用TransientFaultHandling将其包装在重试中是否有任何好处?如果我想要更多的重试或其他重试策略,则可以直接在主题客户端上直接配置其他重试策略,而不必将两个重试策略包装在一起。

1 个答案:

答案 0 :(得分:1)

  

我可以直接在主题客户端上直接配置另一个重试策略,而不必将两个重试策略包装在一起。

这就是使用Azure Service Bus .NET客户端创建的RetryPolicy能够重新配置它以满足您的需求的原因。您不必引入第三者重试,除非在内置重试策略不能满足您需要的情况下确实需要它。