gpt4 book ai didi

c# - Polly 断路器模式 - 用于测试连接字符串

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:21 26 4
gpt4 key购买 nike

我正在尝试使用 Polly 测试连接字符串是否为空。如果为null,我想使用CircuitBreaker尝试三次,并且消息应该在控制台窗口中输出。

Policy policy = null;

// Break the circuit after the specified number of exceptions
// and keep circuit broken for the specified duration.
policy = Policy
.Handle<NullReferenceException>()
.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 SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["Test1"].ConnectionString;
return conn.ConnectionString;
}

为了对此进行测试,我在 App.config 中更改了连接字符串名称。

<connectionStrings>
<add name="Testconnectionstring" connectionString="Data Source=(Local);Initial Catalog=Test;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>

但是它似乎无法处理 NullReferenceException

当我调试应用程序时 - 它打开 CircuitBreakerEngine.cs not found 并仅打印

"Object reference not set to an instance of an object".

预期:三次打印未设置到对象实例的对象引用以及来自 BrokenCircuitException

的消息

最佳答案

我相信您误解了 CircuitBreaker 策略的作用,如以下类似问题所述:Polly framework CircuitBreakerAsync does not retry if exception occur

断路器本身不会安排任何重试。相反,它的存在是为了测量通过它执行的代表的故障率 - 如果故障率变得太高,则跳闸。由于它的目的只是作为一个测量和破坏的设备,它确实会重新抛出通过它执行的委托(delegate)的异常:因此您会看到重新抛出的 NullReferenceException

编辑:断路器的这种行为及其与重试的区别,在 Polly wiki 中也有清楚的描述,地址:https://github.com/App-vNext/Polly/wiki/Circuit-Breaker

要执行我认为您想执行的操作,您需要将重试策略与熔断器策略相结合,如 Polly framework CircuitBreakerAsync does not retry if exception occur 中所述。 . Polly 现在提供 PolicyWrap使组合策略变得容易。

关于c# - Polly 断路器模式 - 用于测试连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com