我正在寻找可跨多台机器工作的锁定机制的建议。就我而言,我基本上只是希望能够在两台机器上启动一项服务,并在另一台机器完成之前阻止一个服务,这是一种简单的方法,可以在服务机器出现故障时确保冗余。
有点像分布式锁服务 https://stackoverflow.com/questions/1059580/distributed-lock-service但专门寻找人们已成功与 .NET 集成的项目。
我们使用SqlServer的应用锁 https://msdn.microsoft.com/en-us/library/ms189823.aspx分布式锁定的功能。如果 SqlServer 已经是您的堆栈的一部分,这尤其方便。
为了让 .NET 更容易使用它,我创建了一个NuGet包 https://github.com/madelson/DistributedLock这使得使用此功能变得很容易。该库还支持其他后端,例如 Postgres、Azure blob 存储和 Redis。
使用这个库,代码如下所示:
var @lock = new SqlDistributedLock("my_lock_name", connectionString);
using (@lock.Acquire())
{
// critical region
}
由于底层 SqlServer 功能非常灵活,因此还有支持 TryAcquire 语义、超时和异步锁定的重载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)