.net core2.1任务调度Quartz可视化管理

版权声明:博客内容为原创,转发请注明原链接地址 https://blog.csdn.net/qzh459927216/article/details/89488397

框架说明

在实际的业务场景当中,常常会遇到有些事情需按照一定的规律来执行:
比如:每隔3个月定期清理Log日志,释放服务器空间;
比如:物流公司每隔2小时同步一下最新物流追踪信息到电商平台;
比如:人事部门给员工准点生日祝福(公司系统祝福,或者短信祝福等等…)
比如:每隔一段时间检测一下目标系统是否在健康运行,若非健康可以短信/邮件通知相关技术负责人,能在第一时间知道系统故障.
…等等场景,还有很多很多.
本项目是基于Quartz搭建,采用.net core2.1 webapi跨平台开发.关于Quartz的知识,本文不做详细介绍,若对Quartz比较陌生,可以参照官方文档学习:官方文档地址;
整体项目层次说明:
在这里插入图片描述删除线格式
可视化管理界面:
在这里插入图片描述

特点

  1. 支持java,node.js,c#等等语言动态添加任务调度;
  2. 为了实现调度策略具体业务逻辑解耦解耦,采用Job基于http/https请求实现的方式(即:各自业务系统,各自去实现自己调度要干的事,Rubber-Quartz-Web只管理调度策略);
  3. 支持可视化界面添加,和Eureka服务发现添加,或者直接调用api添加来管理调度任务.
  4. 基于.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里的接口具体实现
}

猜你喜欢

转载自blog.csdn.net/qzh459927216/article/details/89488397
今日推荐