若想跳槽可以用这个网站,收录全网面试题,升职、加薪必备神器:面试一点通www.msedt.com
.net core2.1基于Quartz的任务调度-支持Web可视化界面和api调用动态添加
框架说明
在实际的业务场景当中,常常会遇到有些事情需按照一定的规律来执行:
比如:每隔3个月定期清理Log日志,释放服务器空间;
比如:物流公司每隔2小时同步一下最新物流追踪信息到电商平台;
比如:人事部门给员工准点生日祝福(公司系统祝福,或者短信祝福等等…)
比如:每隔一段时间检测一下目标系统是否在健康运行,若非健康可以短信/邮件通知相关技术负责人,能在第一时间知道系统故障.
…等等场景,还有很多很多.
本项目是基于Quartz搭建,采用.net core2.1 webapi跨平台开发.关于Quartz的知识,本文不做详细介绍,若对Quartz比较陌生,可以参照官方文档学习:官方文档地址;
整体项目层次说明:
可视化管理界面:
特点
- 支持java,node.js,c#等等语言动态添加任务调度;
- 为了实现调度策略和具体业务逻辑解耦解耦,采用Job基于http/https请求实现的方式(即:各自业务系统,各自去实现自己调度要干的事,Rubber-Quartz-Web只管理调度策略);
- 支持可视化界面添加,和Eureka服务发现添加,或者直接调用api添加来管理调度任务.
- 基于.net core跨平台实现,Rubber-Quartz-Web可以部署在linux,windows server等服务器上;
.net core2.1 webapi搭建
1. 创建.net core2.1 webapi项目
2. NuGet安装Quartz,版本号3.0.7
3. 在JobScheduling.Application层定义Quartz操作接口;
using JobScheduling.Application.Quartz.Dto;
using JobScheduling.IRepository.Entities;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace JobScheduling.Application.Quartz
{
public interface IJobCenter
{
Task InitTask();
/// <summary>
/// 统计任务
/// </summary>
/// <returns></returns>
StatisTaskOutput StatisTask();
/// <summary>
/// 获取当前任务
/// </summary>
/// <returns></returns>
List<JobOutDto> GetCurrentlyExecutingJobs();
/// <summary>
/// 调度日志
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
List<JobLog> JobLog(JobLogInput input);
/// <summary>
/// 错误日志
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
List<JobLog> ErrorLog(DateTime sTime, DateTime eTime,string jobKey);
/// <summary>
/// 查询jobKey
/// </summary>
/// <returns></returns>
List<string> QueryGroupAndJob();
/// <summary>
/// 添加定时任务
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
Task<string> AddScheduleJobAsync(JobScheduleInput input,int flag = 0);
/// <summary>
/// 编辑定时任务
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
Task<string> UpdateScheduleJobAsync(JobScheduleInput input);
/// <summary>
/// 暂停定时任务
/// </summary>
/// <param name="jobGroup"></param>
/// <param name="jobName"></param>
/// <returns></returns>
Task<bool> StopScheduleJobAsync(Guid taskScheduleId);
/// <summary>
/// 重启任务
/// </summary>
/// <param name="jobGroup"></param>
/// <param name="jobName"></param>
/// <returns></returns>
Task<bool> RunScheduleJobAsync(Guid taskScheduleId);
/// <summary>
/// 删除定时任务
/// </summary>
/// <param name="jobGroup"></param>
/// <param name="jobName"></param>
/// <returns></returns>
Task<bool> DeleteScheduleJobAsync(Guid taskScheduleId);
}
}
4.实现Quartz操作接口
通过构造函数,注入Quartz框架中ISchedulerFactory
public class JobCenter : IJobCenter
{
public static IScheduler scheduler = null;
public JobCenter(ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
scheduler = _schedulerFactory.GetScheduler().Result;
}
...增删改查调度任务,通过调用scheduler里的接口具体实现
}
若想跳槽可以用这个网站,有更详细的资源http://www.msedt.com/