萍乡文明网:ScheduleMaster新特征之延时义务初体验

admin 4个月前 (05-19) 科技 37 0

ScheduleMaster在上个月尾更新到了2.0版本,在功效和代码以及文档上都往前跨了很大一步,详细信息可以参考这篇文章:https://www.cnblogs.com/hohoa/p/12772945.html

对ScheduleMaster还不熟悉的同伙可以先移步作者的系列文章:https://www.cnblogs.com/hohoa/category/1628282.html

这次的更新点主要包罗:

  • 开发了延时义务功效。

  • 抽象出分布式锁服务并默认数据库实现。

  • 弥补了单元测试。

  • 弥补了几篇文档。

  • 修复了已知的bug。

其中的重头戏自然是延时义务功效,所谓的延时义务就是在指准时刻执行指定逻辑,这在平时需求开发中是非经常见的,作为一款功效齐全的调剂系统这固然也是必备的功效。

关于延时义务的实现原理我早期写过一篇文章《接纳浅易的环形延时行列处置秒级准时义务的解决方案》来先容,ScheduleMaster也是在这个基础上改善而来。

固然了,其他的实现方式也另有许多,主流的实现方案可以参考下面这篇文章,整理的对照齐全:https://www.cnblogs.com/vipstone/p/12696465.html

我接纳的就是对照经典的时间轮算法,原理就不再重复先容了可以移步到我前面的文章,下面看看实现效果。


实现了什么效果

我们先通过一段测试代码看看延时行列的运行情形:

 [Fact]
 public void Run()
 {
     //初始化容器
     DelayPlanManager.Init();
     Debug.WriteLine($"延时行列初始化完成时间:{DateTime.Now}");

     Func<DelayQueueSlot, Task> callback = (result) =>
      {
          var np = result as NotifyPlan;
          //模拟营业
          Debug.WriteLine($"[{DateTime.Now}]ID:{np.Key},地址:{np.NotifyUrl},延迟秒数:{np.TimeSpan}");

          return Task.CompletedTask;
      };

     //模拟生产端写入义务
     Task[] tasks = new Task[10];
     for (int i = 0; i < 10; i++)
     {
         tasks[i] = new Task(() =>
         {
             for (int k = 0; k < 200; k++)
             {
                 int rndNum = new Random().Next(20, 500);
                 DelayPlanManager.Insert(new NotifyPlan
                 {
                     NotifyUrl = "http://localhost:56655/api/1.0/value/delaypost",
                     Key = Guid.NewGuid().ToString(),
                     Callback = callback
                 }, DateTime.Now.AddSeconds(rndNum));
             }
         }, TaskCreationOptions.LongRunning);
         tasks[i].Start();
     }
     Task.WaitAll(tasks);

     //组织消费者
     while (true)
     {
        DelayPlanManager.Read();
        System.Threading.Thread.Sleep(1000);
     }
 }

代码中建立了2000个延时义务,延时范围在20秒至500秒,以是我们展望在程序启动后最快20秒就最先有信息输出,程序调式效果为:

当一个周期执行完后恰好过了1分钟:

分秒不差。


先睹为快

再看看在项目中的现实应用。

控制台建立义务页面:

不外现实使用中通过API方式建立显然更相符需求,以是一如既往地提供了开放API供营业系统接入,详细使用方式参考官方文档【使用API接入义务】。

系统提供了2种延迟模式供选择,即相对时间绝对时间,可以在系统参数中设置,默认是使用相对时间。但使用相对时间模式有一点要注意,各节点间可能存在系统时间差导致义务被多次执行,以是营业做好幂等性控制至关重要。

延时义务治理页面:
萍乡文明网:ScheduleMaster新特征之延时义务初体验 第1张
萍乡文明网:ScheduleMaster新特征之延时义务初体验 第2张

这里注释下义务的各个状态

  • 已作废,示意已经从执行计划移除

  • 已建立,示意刚建立好还没有加入执行计划

  • 已停当,示意已加入到执行计划中守候执行

  • 已完成,示意执行乐成

  • 异常,示意执行失败

继续看一下义务运行情形。

单节点执行乐成:
萍乡文明网:ScheduleMaster新特征之延时义务初体验 第3张

异常重试效果:
萍乡文明网:ScheduleMaster新特征之延时义务初体验 第4张

可用的参数设置:
萍乡文明网:ScheduleMaster新特征之延时义务初体验 第5张

更多好玩的器械迎接下载体验~


写在最后

喜欢的同伙请来一波star支持,并连续关注~~

传送门:

  • https://github.com/hey-hoho/ScheduleMasterCore
  • https://gitee.com/hey-hoho/ScheduleMasterCore (只从github同步)
,

阳光在线

阳光在线www.kingtaowang.com(原诚信在线)现已开放阳光在线手机版下载。阳光在线游戏公平、公开、公正,用实力赢取信誉。

Sunbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:萍乡文明网:ScheduleMaster新特征之延时义务初体验

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:642
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1010
  • 评论总数:267
  • 浏览总数:7544