Anno&Viper -分布式锁服务端怎么实现

  Anno是一个微服务框架引擎。入门简单安全稳定高可用全平台可监控、依赖第三方框架少。底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项目验证过的跨语言的thrift、 grpc。 自带服务注册发现健康检查(不依赖于Etcd、Consul、Zookeeper)、调用链追踪、Cron 调度、限流、事件总线。插件化开发,业务模块以CQRS 、DDD作为指导思想。

  一个不可监控的微服务平台是可怕的,出了问题 难以准确定位问题的根源, Anno则提供了一套完整的监控体系,包括链路追踪、服务占用的系统资源、系统自身 CPU、内存、硬盘使用率实时可监控等等。

github Anno:https://github.com/duyanming/Anno.Core  

gitee      :https://gitee.com/duyanming/anno.core

体验地址:

Anno&Viper -分布式锁服务端怎么实现

Anno&Viper -分布式锁服务端怎么实现

2、Anno分布式锁服务端怎么实现

  上一章节我们了解了分布式锁是为了解决什么问题以及客户端怎么使用,今天我们来看一下分布式锁协调中心是怎么实现的。不足之处望大佬们多多指正。如果还不了解怎么使用可以查看上一章节《.netcore 微服务快速开发框架 Anno&Viper -分布式锁是个什么鬼》

首先我们需要一个分布式锁服务端的入口类 DLockCenter

伪代码:

public static class DLockCenter { private static List<LockerQueue> _lockerQueues = new List<LockerQueue>(); private static readonly object Lock = new object();
     //进入分布式锁
     public static EngineData.ActionResult Enter(LockInfo info) { var locker = _lockerQueues.Find(l => l.MLoker.Key == info.Key);
        ............
return locker.Enter(info); }
    //释放分布式锁
public static void Free(LockInfo info) { _lockerQueues.Find(l => l.MLoker.Owner == info.Owner)?.Free(); } /// <summary> /// 定时任务检测分布式锁是否超时, 超时直接抛弃 /// </summary> public static void Detection() { if (_lockerQueues.Count > 0) { _lockerQueues.Where(l=>l.MLoker.IsTimeOut&&l.MLoker.Type!=ProcessType.Free).ToList().ForEach(l=>l.Detection()); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwwy.html