推荐一款好用的任务定时器:Quartz
前言
官网:https://www.quartz-scheduler.net/ 一款开源的任务定时器。
日常有很多地方需要定时刷新的,比如微信开发中的微信API token,或者定时清理一下缓存数据等,应用场景还是比较常见。
接下来介绍一下这个简单好用的库。
引用
在Nuget管理中添加引用: Quartz.dll
命名空间:
using Quartz;
using Quartz.Impl;
写一个Task
实现一个task,按时刷新API的token:
public async Task RefreshAzulApiTokenJob(IScheduler scheduler)
{
var tokenJobName = "RefreshAzulToken";
IJobDetail tokenJob = JobBuilder.Create<RefreshAzulTokenJob>()
.WithIdentity($"{tokenJobName}Job", $"{tokenJobName}Group")
.Build();
ITrigger tokenTrigger = TriggerBuilder.Create()
.WithIdentity($"{tokenJobName}Trigger", $"{tokenJobName}Group")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(RefreshAzulTokenInterval)
.RepeatForever())
.Build();
await scheduler.ScheduleJob(tokenJob, tokenTrigger);
}
主要是创建一个Job,这个Job就是一个要定时运行的Task,创建一个Trigger,在Trigger里面自定义设置interval时间。
Job实现
1.创建一个类,用来处理这个任务的业务逻辑,比如这个刷新token:
public class RefreshAzulToken
{
public static readonly ILogger logger;
private static readonly RedisUtils redisUtils;
static RefreshAzulToken()
{
logger = LoggerFactory.GetLogger("RefreshAzulToken", EnvSettings.ElkAddress);
redisUtils = ChatbotApiServiceManager.RedisUtils;
}
public static async Task Excutor()
{
try
{
logger.Information(new ApiRequestEvent()
{
EventType = LogEventType.RefreshAzulTokenStart,
Message = $"Start to get api token..."
});
var tokenRequestUrl = EnvSettings.AzulTokenUrl;
string tokenPostData = "client_id=indigo&client_secret=2lw$IE6GIwsnlUYh&grant_type=client_credentials";
string tokenResponse = await AzulApiClient.AzulHttpClient(true, tokenRequestUrl, tokenPostData);
var token = JsonConvert.DeserializeObject<AzulAccessToken>(tokenResponse);
logger.Information(new ApiRequestEvent()
{
EventType = LogEventType.RefreshAzulTokenComplete,
Message = $"Refresh api token succeed, token:{token.AccessToken}"
});
redisUtils.SetAzulApiToken(token.AccessToken);
logger.Information(new ApiRequestEvent()
{
EventType = LogEventType.RefreshAzulTokenComplete,
Message = $"Save token into Redis succeed, token:{redisUtils.GetAzulApiToken()}"
});
}
catch (Exception ex)
{
logger.Error(new ExceptionEvent()
{
EventType = LogEventType.RefreshAzulTokenError,
Message = $"Refresh Azul api token failed.",
Exception = ex,
});
}
}
}
2.创建另外一个类,这个类继承Quartz中的IJob,调用上面业务逻辑的方法:
public class RefreshAzulTokenJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await RefreshAzulToken.Excutor();
}
}
这样一个简单的Task Job 就创建好了,RefreshAzulTokenJob 就是第一步里面创建Job的参数。
Job启动
在应用程序的starup.cs里,启动这个Scheduler Task:
TaskScheduler().Scheduler().GetAwaiter().GetResult();
推荐一款好用的任务定时器:Quartz的更多相关文章
- 推荐10款超级有趣的HTML5小游戏
HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...
- 【转】推荐10款最热门jQuery UI框架
推荐10款最热门jQuery UI框架 原创 在进行Web开发时,并非所有的库都适合你的项目,但你仍需要收藏一些Web UI设计相关的库或框架,以在你需要的时候,加快你的开发效率.本文为你推荐10款非 ...
- 推荐一款Mac上好用的Markdown编辑器
[TOC] 推荐一款Mac上好用的Markdown编辑器 正文 我算是一位Evernote的重度用户吧.之前也尝试过为知笔记,有道云笔记,微软的onenote,最后还是觉的Evernote.因为我喜欢 ...
- 推荐几款我一直在用的chrome插件(上)
我用的chrome插件挺多的,所谓工欲善其事必先利其器,我热衷于搜寻好用的工具来让我平时的工作事半功倍.下面介绍几款我正在用的感觉还不错的插件,如果大家还有其它好用的(肯定有,chrome插件库太庞大 ...
- 推荐几款我一直在用的chrome插件(下)
请先看:推荐几款我一直在用的chrome插件(上) 6. Pocket 可以很方便的保存文章.视频等供以后查看,即实现了“Read it later”功能.有了 Pocket,您可以将所有想下次读的内 ...
- 墙裂推荐4款js网页烟花特效
以下是几款网页特效和一款软件: http://keleyi.com/keleyi/phtml/jstexiao/1.htm http://keleyi.com/keleyi/phtml/jstexi ...
- 再次推荐一款逼真的HTML5下雪效果
再次推荐一款逼真的下雪效果 效果图: 效果描述:之前推荐过一款下雪的jQuery插件之前的那款下降速度比较缓慢,今天推荐的这个下降速度比较快,大雪哇 使用方法:1.将index.html中的样式复制到 ...
- 【开发软件】推荐一款MAC OS X 下php集成开发环境mamp
这里给大家推荐一款在mac上搭建WEB服务器环境的集成环境安装软件,非常的好用,需要的朋友可以拿去,不用谢 ^_^ 之前苦于mac上搭建本地服务器之艰辛,找寻好久都没找到一款类似windows ...
- 推荐15款最佳的 jQuery 分步引导插件
当用户浏览到一个网站,它可能从不知道如何浏览,如何操作网站或 Web 应用程序的内容和流程.在这篇文章中,我们编制了一些最好的 jQuery 引导插件列表.你会发现这些插件对于提高你的网站的整体用户体 ...
随机推荐
- 【缩点+拓扑判链】POJ2762 Going from u to v or from v to u?
Description In order to make their sons brave, Jiajia and Wind take them to a big cave. The cave has ...
- 【爆料】-《亚伯大学毕业证书》Aber一模一样原件
☞亚伯大学毕业证书[微/Q:865121257◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&am ...
- poj 3687
Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...
- HTTP 视频怎么在 MIP 页面中使用?
在 MIP 中,一些资源的使用需要支持 HTTPS,视频就是其中一种.但目前大部分站点的视频资源都还是 HTTP 的资源,无法在百度 MIP 搜索结果中直接使用, mip-video 视频组件针对 H ...
- C++ : 内联函数和引用变量
一.内联函数 内联函数和普通函数的使用方法没有本质区别,我们来看一个例子,下面展示了内联函数的使用方法: #include <iostream> using namespace std; ...
- ecs云服务器 mysql经常自动停止挂掉重启问题分析
我的ecs服务器为1g内存的配置,在部署了nginx,mysql,redis,node服务后跑起项目来,(mysql使用默认配置),每过几天便发现了经常会出现数据库自动停止挂掉,然后几分钟后重启的现象 ...
- HBase的下载、安装与配置
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 (一)安装 下载.解压: wget http://mirror.bit.edu.cn/apache/hbase/1.3.1/hbase-1.3.1- ...
- 前端笔记之NodeJS(三)Express&ejs模板引擎&请求识别
一.Express框架 1.1基本使用 创建http服务器特别麻烦,express框架解决了这个的问题. Express在node界的地位,就相当于jQuery在DOM界的地位.jQuery的核心就是 ...
- PHP扩展高性能日志系统SeasLog简单上手
Windows部分:-------------------------------------------------------- https://pecl.php.net/package/Seas ...
- CopyOnWriteArrayList你都不知道,怎么拿offer?
前言 只有光头才能变强 前一阵子写过一篇COW(Copy On Write)文章,结果阅读量很低啊...COW奶牛!Copy On Write机制了解一下 可能大家对这个技术比较陌生吧,但这项技术是挺 ...