PasteTimer 是一个开源且商业免费使用的工具函数库。可以让你非常容易地在 ASP.NET 应用(也可以不在 ASP.NET 应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于 Windows Service 后台任务执行器。且任务信息可以被持久保存。
支持跨平台部署,建议采用Docker部署
源代码分享地址: https://gitee.com/pastecode/pastetimer
从上面的gitee地址中拉取项目代码
使用VS2022打开,你会看到如下代码结构
项目大概分2个模块,一个客户端模块,一个服务端模块,服务端由于PasteTimer本身有任务报表模块,所以他是有客户端的,所以src文件夹的项目有引用client文件夹的项目。
设置PasteTimer.HttpApi.Host为启动项目后,右键生成,看看是否生成成功!
如果你使用mysql数据库
1.使用VS2022打开本项目
首先在appsettings.json中修改数据库链接字符串,也就是在ConnectionStrings:MainConnectionString后面
然后在appsettings.json中修改TaskConfig:DataType的值修改为mysql
2.设置PasteTimer.HttpApi.Host为启动项目(就是右侧解决方案里面这个项目加粗了)
3.右键2的这个项目进行生成,看看是否生成成功,成功成功后继续往下执行
4.点击上方的工具栏 --》视图 --》其他窗口 --》程序包管理器控制台
5.在VS工具下方找到这个窗口,然后在这个程序包管理器控制台的里面的 默认项目(J)后面下拉选择项目为src\PasteTimer.EntityFrameworkCore
6.下下方输入如下命令add-migration databaseinit -Context MysqlDbContext
7.如果要同步数据库表结构给数据库,则继续执行命令update-database -Context MysqlDbContext
如果你使用其他数据库
则可以跳过上面的步骤,只需要在发布的文件夹中修改appsettings.json中的相关配置,系统在启动的时候会自己检查数据库是否创建,数据库表是否创建,默认账号是否配置等操作。
PasteTimer和本论坛的一般系统一致采用EF模式,所以在数据库的创建上非常简单,你只要填写你的数据库的连接和配置好数据库的类型即可,系统在第一次部署启动后会自动的去完成数据库的相关配置。
右键发布,选择发布到文件夹,然后采用默认配置或者基于自己的服务器情况配置进行发布,发布成功后就会得到发布的文件列表。
部署到服务器后,根据配置打开对应的地址,会看到如下图:
就表示你部署成功啦,然后使用appsettings.json里面的默认账号密码进行登陆。
出去基础的管理账号,推送模块等,这里其实有的信息就是节点信息和任务列表,然后是任务报表和任务记录。
这里有一个概念,就是任务是需要指定组的,任务所在的组和节点所在的组处于同一个组的时候,表示这些任务发布到这个组的节点去执行。如果任务的组你设置为*的话,那么他会发布给所有的节点执行,这种情况一般是失败的,因为任务都是需要按需去实现的。
要实现一个任务,只需要写一个class继承于IPasteCodeTaskBase
这里有一个案例,你可以查看PasteTimer.HttpApi.Host的项目中的/Service/RemoteTestHandler.cs的内容
查看和这个RemoteTeshHandler的相关引用,发觉他在这几个地方有代码
在项目的入口文件PasteTimerHttpApiHostModule.cs中执行了注入
context.Services.AddTransient<IPasteCodeTaskBase, RemoteTestHandler>();
基于上面的特性,你可以实现单例,瞬时等!
查看PasteTimer.HttpApi.Host\Service\SlaveHostedService.cs可以了解到,这个服务执行了轮询任务,命中任务后,根据配置规则,推送任务到任务节点,任务节点执行完成任务后,返回任务结果给服务端(PasteTimer.HttpApi.Host\Controllers\TaskController.cs)