我正在寻找一种方法,在连接成功之前,以一种无需设置定时器的方式对我无法控制的服务进行远程调用。通过大量研究后,电路断路器模式似乎是一个很好的选择。
我发现一个使用Castle Windsor拦截器的实现,看起来很棒。唯一的问题是我不知道如何使用它。关于这个话题,我找到的文章很少,唯一找到的使用示例仅限于使用电路断路器调用一个操作仅一次,这似乎并不是很有用。因此,似乎我需要在while(true)
循环中使用电路断路器运行我的操作。
如何使用Windsor拦截器执行调用外部服务的操作,直到成功,并避免给我们的服务器造成压力?
请有经验的人填补缺失的部分。
这是我能想到的
while(true)
{
try
{
service.Subscribe();
break;
}
catch (Exception e)
{
Console.WriteLine("Gotcha!");
Thread.Sleep(TimeSpan.FromSeconds(10));
}
}
Console.WriteLine("Success!");
public interface IService
{
void Subscribe();
}
public class Service : IService
{
private readonly Random _random = new Random();
public void Subscribe()
{
var a = _random.Next(0, 10) % 2421;
if(_random.Next(0, 10) % 2 != 0)
throw new AbandonedMutexException();
}
}
基于那个,我现在认为我理解了这个概念以及如何应用它。