A full feature platform to host and manager a Quartz.Net job using topshelf and asp.net core WebApi
Newcats.JobManager是一个基于QuartzNet3.0构建的简易任务调度平台。整个方案使用QuartzNet/Topshelf/.NET Core Generic Host/Asp.net Core WebApi等技术开发,主要分为管理端和服务端。管理端主要为对job信息的数据库记录进行CRUD操作,上传DLL文件,查看日志,查看文件等,主要通过Asp .net Core WebApi进行。服务端为一个Windows Service,由Topshelf承载,负责具体QuartzJob的调度,轮询数据库的job记录,并根据不同的状态对job进行管理。
Newcats.System.Job.XXX/Newcats.Business.Job.XXX/Newcats.Test.Job.XXX
使用Windows Server 2012及以上的服务器版本,安装.NET Core2.2 Runtime及以上的运行时,安装IIS服务。
Newcats.JobManager.Api
VS右键->发布->配置:Release/目标框架:netcoreapp2.2/部署模式:框架依赖/目标运行时:可移植Newcats.JobManager.Host
使用dotnet命令发布 dotnet publish -c Release -r win-x64
Newcats.System.Job.DeleteSystemLog
直接Release模式编译,生成类库dll即可/doc/1.Database Scripts.sql
SQL脚本JobManager
│
├─JobApi
│ ......
│ Newcats.JobManager.Api.dll
│ web.config
│ ......
└─JobHost
......
Newcats.JobManager.Common.dll
Newcats.JobManager.Common.pdb
Newcats.JobManager.Host.deps.json
Newcats.JobManager.Host.dll
Newcats.JobManager.Host.exe
Newcats.JobManager.Host.pdb
Newcats.JobManager.Host.runtimeconfig.json
Newtonsoft.Json.dll
Quartz.dll
Topshelf.dll
TopShelf.ServiceInstaller.dll
ucrtbase.dll
WindowsBase.dll
......
C:\WINDOWS\system32>cd\
切换目录C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe install
安装服务C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe start
启动服务C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe stop
停止服务C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe uninstall
卸载服务Microsoft Windows [版本 10.0.17763.437]
(c) 2018 Microsoft Corporation。保留所有权利。
C:\Windows\system32>cd\
C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe install
Configuration Result:
[Success] Name JobManagerHostServer
[Success] DisplayName 作业调度服务
[Success] Description 作业调度管理器的托管服务
[Success] ServiceName JobManagerHostServer
Topshelf v4.2.0.194, .NET Framework v4.0.30319.42000
Running a transacted installation.
Beginning the Install phase of the installation.
Installing 作业调度服务 service
Installing service JobManagerHostServer...
Service JobManagerHostServer has been successfully installed.
The Install phase completed successfully, and the Commit phase is beginning.
The Commit phase completed successfully.
The transacted install has completed.
C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe start
Configuration Result:
[Success] Name JobManagerHostServer
[Success] DisplayName 作业调度服务
[Success] Description 作业调度管理器的托管服务
[Success] ServiceName JobManagerHostServer
Topshelf v4.2.0.194, .NET Framework v4.0.30319.42000
The JobManagerHostServer service was started.
C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe stop
Configuration Result:
[Success] Name JobManagerHostServer
[Success] DisplayName 作业调度服务
[Success] Description 作业调度管理器的托管服务
[Success] ServiceName JobManagerHostServer
Topshelf v4.2.0.194, .NET Framework v4.0.30319.42000
The JobManagerHostServer service was stopped.
C:\>D:\JobManager\JobHost\Newcats.JobManager.Host.exe uninstall
Configuration Result:
[Success] Name JobManagerHostServer
[Success] DisplayName 作业调度服务
[Success] Description 作业调度管理器的托管服务
[Success] ServiceName JobManagerHostServer
Topshelf v4.2.0.194, .NET Framework v4.0.30319.42000
The uninstall is beginning.
Uninstalling JobManagerHostServer service
Service JobManagerHostServer is being removed from the system...
Service JobManagerHostServer was successfully removed from the system.
The uninstall has completed.
C:\>JobHost\
注意,版本号一定要和Host里面的版本一致(即和服务器版本一致)
Install-Package Quartz -Version 3.0.7
IJob
接口,业务逻辑写在Execute
方法里面 /// <summary>
/// 删除一个月前的JobLevel.System级的JobLog
/// </summary>
public class DeleteSystemLogJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
new DeleteService().DeleteSystemLog();
return Task.CompletedTask;
}
}
上传DLL文件
按钮,选择此项目有关的DLL文件(服务器已有的,未修改dll文件可以不上传)新增Job
按钮,弹出模态框,填写相关的Job信息Job信息
列表里找到刚刚添加的Job,点击启动,就可以将Job添加到调度器了Job日志
如下:文件列表
如下:日志
查看最近的20条运行日志编辑
修改Job信息,如果改了类名/程序集名/Cron表达式,需要先停止再启动,才能生效启用
把处于禁止状态的Job改为启用禁用
需要先停止,再禁用,禁用的Job不会再加入调度器启动
启动Job,如果不存在,会重新加入调度器停止
停止Job,会从调度器删除执行一次
不管调度计划如何,立即执行一次Job各个项目里面引用的包,一定要使用相同的版本号,必需和服务器使用的版本号一致
升级项目的包版本一定要统一进行,更新服务器的所有包
上传文件时,如果遇到同名文件,会先删除然后替换,一定注意
如果你在阅读或使用任意一个代码片断时发现Bug,或有更佳实现方式,欢迎提Issue。
对于你提交的代码,如果我们决定采纳,可能会进行相应重构,以统一代码风格。
对于热心的同学,将会把你的名字放到贡献者名单中。
MIT © Newcats