.NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激、尊重。请严格遵守每个项目的开源协议后再使用。尊重知识产权,共建和谐开源社区。
以下开源项目(含组件),从网络搜集,后期会不断补充。

FluentSchedule 是.NET平台下的一款轻量级任务调度组件。接口丰富,功能强大,简单易容。官网提供的丰富示例,让开发者很容易上手。如果在项目中简单的设置定时任务,优先使用该组件。
官网:https://fluentscheduler.github.io/
GitHub:https://github.com/fluentscheduler/FluentScheduler

ScheduleMaster是一个开源的分布式任务调度系统,它基于.NET Core 3.1平台构建,支持跨平台多节点部署运行。
主要特性:
简易的Web UI操作;
任务动态管理:创建、启动、停止、暂停、恢复、删除等;
高可用支持,跨平台多节点部署。
数据安全性,不会出现多实例并发调度。
支持自定义参数设置;
支持 .NET Core 和 .NET Framework(4.6.1+);
支持自定义配置文件和热更新;
支持设置监护人,运行异常时邮件告警;
支持设置任务依赖,自动触发,共享任务结果;
插件式开发,任务运行环境隔离;
全链路日志系统,运行轨迹轻松掌控;
用户访问控制;
提供开放REST API,业务系统可以无缝集成;
调度报表统计;
任务分组管理;
计划表拆分实现复用;
指定节点运行;
支持http任务配置;
支持延时任务;
任务监控;
资源监控;
支持异常策略配置(失败重试、超时控制等);
接入redis缓存;
多数据库类型支持;
用户权限更加精细化;
报表统计完善;
技术栈:
ASP.NET Core3.1、EntityFramework Core3.0、Mysql5.7、Quartz.Net、BeyondAdmin、Jquery...
Gitee:https://gitee.com/hey-hoho/ScheduleMasterCore

.NET Framework 通过 System.Timers.timer 类具有“内置”计时器功能。为什么有人会使用Quartz而不是这些标准功能?
原因包括以下几个方面:
- 计时器没有持久性机制。
- 计时器的调度不灵活(只能设置开始时间和重复间隔,不能基于日期、时间等进行设置)。
- 计时器不使用线程池(每个计时器一个线程)。
- 计时器没有真正的管理方案——你必须编写自己的机制,以便能够记住、组织和按名称检索任务等。
对于一些简单的应用程序,这些功能可能并不重要,在这种情况下,不使用Quartz.NET可能是正确的决定。
官网:https://www.quartz-scheduler.net/
GitHub:https://github.com/quartznet/quartznet
Hangfire是一个开源框架,它帮助您创建、处理和管理后台作业。
功能特征:
- 支持基于队列的任务处理。任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。使用方法:
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
- 延迟任务(方法)执行。可以将方法的执行推迟一段指定的时间,而不是立即调用方法:
BackgroundJob.Schedule(() => Console.WriteLine("Hello, world!"), TimeSpan.FromMinutes(5));
- 循环执行任务。只需简单的一行代码就可以添加重复执行的任务,其内置了常见的时间循环模式,也可以基于CRON表达式来设定复杂的模式。使用方法:
RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Daily);
RecurringJob.AddOrUpdate(() => Console.Write("Powerful!"), "0 12 * */2");
- SQL Server 与 Redis 持久化支持。Hangfire使用持久性存储来存储作业、队列和统计信息,并让它们在应用程序重启后继续存在。存储子系统的抽象程度足以支持经典的SQL Server和快速的Redis。
- SQLServer提供了简化的安装和常规的维护计划。
- Redis提供了惊人的速度,尤其是与sqlserver相比,但需要更多的知识。
- 自动重试机制。如果你的方法遇到了一个暂时的异常,不用担心——它会在几秒钟内自动重试。如果所有重试尝试都已用尽,则可以从集成的web界面手动重新启动。还可以使用AutomaticRetryAttribute类控制重试行为。只需将其应用于您的方法,告诉Hangfire重试次数:
[AutomaticRetry(Attempts = 100)]
public static void GenerateStatistics() { } BackgroundJob.Enqueue(() => GenerateStatistics()); - 保证执行任务。Hangfire是在知道托管环境可以杀死每行上的所有线程的情况下制作的。因此,它在成功完成之前不会删除作业,并且包含不同的隐式重试逻辑以在其处理中止时执行该作业。
- 实例方法调用。Hangfire除了支持静态方法调用,还支持调用实例方法。当worker看到给定的方法是实例方法时,它将首先激活它的类。默认情况下,使用Activator.CreateInstance方法,因此默认情况下仅支持具有默认构造函数的类。但是您可以插入IoC容器并通过构造函数传递依赖项。
public class EmailService
{
public void Send() { }
} BackgroundJob.Enqueue<EmailService>(x => x.Send());
- 文化捕捉。当您将方法调用编组到另一个执行上下文中时,您应该能够保留一些环境设置。他们中有些人-Thread.CurrentCulture以及Thread.CurrentUICulture将自动为您拍摄。PreserveCultureAttribute默认情况下,它由应用于所有方法的类完成。
- 支持任务取消。Hangfire可以告诉方法由于shutdown事件而被中止或取消,因此可以使用类似于常规CancellationToken类的作业取消令牌来优雅地停止它们。
public void Method(IJobCancellationToken token)
{
for (var i = 0; i < Int32.MaxValue; i++)
{
token.ThrowIfCancellationRequested();
Thread.Sleep(1000);
}
}
- 支持IOC容器。目前支持Ninject和Autofac。
- 支持日志记录。Hangfire使用Common.Logging库来记录其所有事件。
- 友好的Web支持。可以在相同或不同的机器上运行多个 Hangfire 实例。它使用分布式锁定来防止竞争条件。每个 Hangfire 实例都是冗余的,可以无缝添加或删除实例(但要控制它们侦听的队列)。
- 支持多队列处理。同一个Hangfire实例可以支持多个队列,以便更好的控制任务的执行方式。
- 并发级别的控制。Hangfire使用自己的固定工作线程池来消耗排队的作业。默认工作进程计数设置为 Environment.ProcessorCount*5,即CPU数量的5倍。此数字针对CPU密集型和I/O密集型任务进行了优化。如果遇到过多的等待或上下文切换,可以手动配置工作进程的数量:
app.UseHangfire(config =>
{
config.UseServer(100);
}); // or
var server = new BackgroundJobServer(100);
- 多环境处理任务。默认情况下,作业处理是在 ASP.NET 应用程序中进行的。但是您可以在控制台应用程序、Windows 服务或其他任何地方处理作业。
- 可扩展性。Hangfire 旨在尽可能通用。您可以扩展以下部分:
- 存储实现
- 状态子系统(包括创建新状态)
- 创造就业的过程
- 工作绩效流程
- 状态变化过程
- 工作激活过程
一些核心组件作为扩展:QueueAttribute、PreserveCultureAttribute、AutomaticRetryAttribute、SqlServerStorage、RedisStorage、NinjectJobActivator、AutofacJobActivator、ScheduledState。
MVP 2015社区大讲堂之:在ASP.NET应用中执行后台任务。
PPT:http://pan.baidu.com/s/1eQpKURK
参考文献:
- https://www.cnblogs.com/redmoon/p/4394962.html
.NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件的更多相关文章
- .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目
系列目录 [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...
- .NET Core/.NET5/.NET6 开源项目汇总6:框架与架构设计(DDD、云原生/微服务/容器/DevOps/CICD等)项目
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- .NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架
系列目录 [已更新最新开发文章,点击查看详细] .NET Core 实现了跨平台,支持在 Windwos.Linux.macOS上开发与部署,但是也仅限于Web应用程序.对于Windows桌面 ...
- .NET Core/.NET5/.NET6 开源项目汇总10:实用工具
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- .NET Core/.NET5/.NET6 开源项目汇总1:常用必备组件
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- .NET Core/.NET5/.NET6 开源项目汇总3:工作流组件
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- .NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- .NET Core/.NET5/.NET6 开源项目汇总12:WPF组件库2
系列目录 [已更新最新开发文章,点击查看详细] WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Frame ...
- .NET Core/.NET5/.NET6 开源项目汇总13:模板引擎
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
随机推荐
- 【vue-06】webpack npm
什么是Webpack Webpack是一款模块加载器兼打包工具,他能把各种资源,比如js,css,less转化成一个静态文件,减少页面的请求,提高效率. 安装Webpack 在安装webpack之前, ...
- sql常识-RIGHT JOIN
SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行. RIGHT JOIN ...
- vuex、localStorage、sessionStorage之间的区别
vuex存储在内存中,localStorage以文件形式存储在本地,sessionStorage针对一个session(阶段)进行数据存储. 当页面刷新时vuex存储的数据会被清除,localStor ...
- XAML一些控件的使用
这节来讲一些XAML中常用控件的使用. Window Window控件是一个基础,它是其它控件的容器,我们可以通过修改其中的一些属性来设置窗体的显示效果,下面说一些最常用的属性: WindowStar ...
- SE_Work2_交点个数
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:求交点个数 个人项目作业 班级:005 Sample GitHub地址 IntersectProject 一.PSP估算 在开始实 ...
- stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用库函数使用GPIO引脚功能. 补充 本文章为多年前学习 ...
- [刷题] 1016 部分A+B (15分)
思路 以字符串形式接收 遍历字符串,组装数据,输出结果 #include <iostream> using namespace std; int main() { string a, b; ...
- [Java] SpringBoot
背景 简化SSM(H)中大量的配置工作,开发人员只关心提供业务功能 可以看成简化了的.按照约定开发的SSM(H) 概念 JavaBean:满足规范的Java类(属性private+默认构造方法+get ...
- [web] 虚拟机网络设置
三种模式 桥接(Bridged):主机网卡--虚拟网桥--虚拟机网卡,把主机虚拟为交换机,虚拟机ip需与主机设置在同一网段,网关与DNS与主机网卡一致 地址转换(NAT):主机网卡--虚拟NAT设备- ...
- Heap Size 与 Stack Size
Heap Size:如果没有用到标准库的malloc,就是废物,纯属浪费内存,所以直接设置为0即可: Stack Size :最大的可读写变量的大小即可: