Redian新闻
>
又见百小僧,.NET分布式毫秒级定时任务Sundial面世

又见百小僧,.NET分布式毫秒级定时任务Sundial面世

公众号新闻

来源 | OSCHINA 社区

作者 | 百小僧

原文链接:https://www.oschina.net/news/219126/sundial-released


何许人也

Hi,我是百小僧,我又来了。
1993 年 05 月生,双子座,2008 年高中接触编程,进入大学后成痴迷状态,于 2012 年 09 月创业至今十年有余,跌跌撞撞还在路上,个人简介不过多阐述,了解更多请移步 【关于作者:https://furion.baiqian.ltd/docs/author
开源十年,坚持每年至少开源一款项目,如今已有 30 个有余,十年间已是超 6 万人的群主。开源十年,我都做了啥?
😊 创造了国内超流行的 .NET 框架 Furion:https://gitee.com/dotnetchina/Furion
😊 创造了前端弹窗组件 LayX:https://gitee.com/monksoul/LayX
😊 创办了 Gitee 平台超有知名度的 dotNET China 组织:https://gitee.com/dotnetchina
😊 创造了分布式毫秒级定时任务 Sundial:https://gitee.com/dotnetchina/Sundial
😊 创造了分布式事件总线 Jaina:https://gitee.com/dotnetchina/Jaina
😊 .NET 全能 Cron 表达式解析 TimeCrontab 作者:https://gitee.com/dotnetchina/TimeCrontab
😊 曾经风靡一时的 Hui 框架作者:https://gitee.com/monksoul/Hui
😊 曾经被 NodeJS 官方推荐的 Monk.Node 框架作者:https://gitee.com/monksoul/Monk.Node
😊 前端 Javascript 验证库的作者:https://gitee.com/monksoul/availdate.js
由于篇幅优先,就不一一例举,感兴趣的可以去访问我 Gitee 个人主页:https://gitee.com/monksoul

沉默时光

在 .NET 领域,有两个主流的定时任务库,一个是 Quartz.NET,另外一个是 Hangfire,过去十年,所有接手的项目中只要涉及到定时任务就离不开这两个库,也只有这个选择,但它们属于国外大神作品,从功能需求上不能自主可控。
随着编程思维和技术的增长,慢慢有了自主创造的意识,所以于 2021 年 11 月就萌生出自己写定时任务的想法,它必须是国人完全自主的分布式毫秒级定时任务,为此我做了长足的准备。

不鸣则已

为了编写无依赖的分布式定时任务,我花费了 9 个月的时间去学习这些知识,见证我创建该库的心路历程:https://gitee.com/dotnetchina/Sundial/issues/I4IL3U
  • 必须了解 Cron 表达式所有原理

  • 必须了解 多线程、信号量,互斥锁,任务,绿色线程,线程 Token 知识

  • 必须了解 TCP/IP 知识,实现集群控制,持久化控制

  • 必须了解 CPU 休眠原理,唤醒原理,解决线程如何唤醒,休眠总时间计算

  • 必须了解 Hash 表,链表知识,数据结构和算法,解决作业内存存储问题

  • 必须了解 队列,管道通讯知识,解决作业运行时状态改变通知问题

  • 必须了解 反射知识,IOC/DI 知识,设计模式,架构设计,为以后拓展和维护

  • 还有很多很多小知识

一鸣惊人

经过了将近 10 个月的开发,测试,迭代,Sundial 诞生了,编写了超 10 万字文档。
https://furion.baiqian.ltd/docs/job

一睹尊容

Sundial

licenseMIT:https://gitee.com/dotnetchina/Sundial/blob/master/LICENSE

nugetv2.5.0:https://www.nuget.org/packages/Sundial
dotNET China:https://gitee.com/dotnetchina
.NET 功能齐全的开源分布式作业调度系统,可从最小的应用程序到大型企业系统使用。

特性

  • 简化调度作业
    • 支持作业监视器
    • 支持作业执行器
    • 支持自定义作业存储组件(持久化)
    • 支持自定义策略执行
    • 内置周期、Cron 作业
    • 支持自定义作业触发器
    • 支持依赖注入控制(含 HTTP 控制支持)
  • 高内聚,低耦合,使代码更简单
  • 很小,仅 41KB
  • 无第三方依赖
  • 可在 Windows/Linux/MacOS 守护进程部署
  • 支持分布式、集群(多实例)部署
  • 支持负载均衡(基于 TCP/IP)
  • 高质量代码和良好单元测试
  • 跨平台,支持 .NET5+

安装

  • Package Manager
Install-PackageSundial
  • .NET CLI

dotnetaddpackageSundial

快速入门

我们在主页上有不少例子,这是让您入门的第一个:
  1. 定义作业,并实现 IJob 接口:

public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;

publicMyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

publicasyncTask ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobDetail}{context.Trigger}{context.OccurrenceTime}");
await Task.CompletedTask;
}
}
  1.  Startup.cs 注册 AddSchedule 服务和作业:

services.AddSchedule(options =>
{
options.AddJob<MyJob>(Triggers.PeriodSeconds(5)
, Triggers.Minutely());
});
  1. 运行项目:

info: System.Logging.ScheduleService[0]
Schedule Hosted Service is running.
warn: System.Logging.ScheduleService[0]
Schedule Hosted Service cancels hibernation and GC.Collect().
info: System.Logging.ScheduleService[0]
The Scheduler of <job1> successfully updated to the schedule.
info: Sundial.Samples.MyJob[0]
<job1> <job1 job1_trigger2> 5000ms 2022/11/23 16:22:51
info: Sundial.Samples.MyJob[0]
<job1> <job1 job1_trigger2> 5000ms 2022/11/23 16:22:56
info: Sundial.Samples.MyJob[0]
<job1> <job1 job1_trigger3> * * * * * 2022/11/23 16:23:00
info: Sundial.Samples.MyJob[0]
<job1> <job1 job1_trigger2> 5000ms 2022/11/23 16:23:01
info: Sundial.Samples.MyJob[0]
<job1> <job1 job1_trigger2> 5000ms 2022/11/23 16:23:07
更多文档:https://furion.baiqian.ltd/docs/job/

文档

您可以在主页找到Sundial文档:https://furion.baiqian.ltd/docs/job/

贡献

该存储库的主要目的是继续发展 Sundial 核心,使其更快、更易于使用。Sundial 的开发在 Gitee 上公开进行,我们感谢社区贡献错误修复和改进。

许可证

Sundial 采用 MIT 开源许可证。
MIT License

Copyright (c) 2020-2022 百小僧, Baiqian Co.,Ltd.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

孤芳自赏

纵你阅人何其多,再无一人恰似我。

你参与开源吗?

点击下方小程序

抽开源中国周边啦~

往期推荐



Forest + IDEA = 双倍快乐! ForestX 隆重登场

整活大师ChatGPT:实现编程语言、构建虚拟机……

AWS:.NET开源资金严重不足,但我会出手



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
大规模GNN如何学习?北邮最新《分布式图神经网络训练》综述,35页pdf阐述分布式GNN训练算法和系统单体架构服务转型至分布式的踩坑经历Prompt总结 | 从MLM预训任务到Prompt Learning原理解析与Zero-shot分类、NER简单实践一文看懂分布式链路监控系统10月28日9:00,H. Vincent Poor教授分享当无线网络边缘“遇上”分布式机器学习美国入境档案--马一浮1903年旧金山分布式定时调度:xxl-job 万字详解Go基础会了怎么进阶?可以动手搞下这个分布式实战 | 极客时间MLPerf排名榜刷新:相同GPU配置训练BERT,飞桨用分布式技术拿下世界第一说说Spring定时任务如何大规模企业级运用黑天鹅作者塔勒布及同事警告:市场“娱乐时间”结束,当心金融“超级定时炸弹”分布式存储:三种主流形态及主要场景Logitech Z506 Surround Sound Home Theater Speaker System五小工业的一些小事只会用 xxl-job?更强大的新一代分布式任务调度框架来了!Redis分布式锁真的安全吗?两周年的纪念MySQL 分布式事务的“路”与“坑”分布式定时任务框架选型季节刚好,红叶正艳隆基HPBC电池“横空出世” 光伏大厂逐鹿分布式分布式追踪与监控:Skywalking介绍聊一聊分布式锁的设计模型东京在召唤4-小田原的鳗鱼饭干货:分布式数据库技术路线及方案分类一个轻量级的分布式日志标记追踪神器,十分钟接入,非常好用![电脑] 广覆盖高速率——华硕灵耀 Pro AX11000 分布式路由开箱简测惨案!老板要求单体架构转型分布式踩坑!保利联手碧桂园,为什么要做分布式光伏?活动回顾 | H. Vincent Poor 教授:当无线网络边缘“遇上”分布式机器学习最小可行架构注意事项:必须考虑分布式处理和数据的位置香港中文大学(深圳)数据科学学院招聘博士后 - 分布式优化和机器学习方向音乐流媒体服务Spotify宣布全球裁员6%支撑千亿级日交易额,平安科技分布式数据库架构设计文末送书 | 从0到1全面探讨分布式人工智能:理论、算法与实践
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。