如何掌握Quartz.net分布式定时任务的姿势

  介绍

这篇文章给大家介绍如何掌握Quartz.net分布式定时任务的姿势,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<节>

引言

长话短说,今天聊一聊分布式定时任务,我的流水账笔记:

    <李> <节> ASP。网络核心+ Quartz.Net实现网络定时任务   ,,
    <李> <节> AspNetCore结合复述,实践消息队列   ,,

细心朋友稍一分析,就知道还有问题:
水平扩展后的WebApp的Quartz.net定时任务会多次触发,因为WebApp实例使用的是默认的<代码> RAMJobStore>

<李> <节>先使用SQL脚本在数据库中生成指定的表结构

执行脚本之后,会看到数据库中多出几个以QRTZ_开头的表

    <李> <节>配置Quartz.net使用AdoJobStore

可采用编码形式或者quartz.config形式添加配置

,

快速实践

,
1。预先生成工作,触发器表

从https://github.com/quartznet/quartznet/tree/master/database/tables下载合适的数据库表脚本,生成指定的表结构

,
2。添加AdoJobStore

本次使用编码方式添加AdoJobStore配置。
首次启动会将代码中工作和触发持久化到sqlite,后面就直接从sqlite中加载工作和触发

 <代码>使用系统;使用System.Collections.Specialized 
,
使用System.Data;使用System.Threading.Tasks
,
使用Microsoft.Data.Sqlite;使用Microsoft.Extensions.Logging
,
使用石英;使用Quartz.Impl
,
使用Quartz.Impl.AdoJobStore.Common;使用Quartz.Spi
,

名称空间EqidManager
{
,,使用IOCContainer=IServiceProvider;

,,公开课QuartzStartup
,,{
,,,,公共IScheduler调度器{得到;设置;}

,,,,私人只读的ILogger实例_logger;
,,,,私人只读的IJobFactory iocJobfactory;
,,,,公共QuartzStartup (IOCContainer IOCContainer, ILoggerFactory loggerFactory)
,,,,{
,,,,,,_logger=loggerFactory.CreateLogger ();
,,,,,,iocJobfactory=new iocJobfactory (IocContainer);

,,,,,,DbProvider.RegisterDbMetadata (“sqlite-custom"新DbMetadata ()
,,,,,,{
,,,,,,,,AssemblyName=typeof (SqliteConnection) .Assembly.GetName ()。名字,
,,,,,,,,ConnectionType=typeof (SqliteConnection),
,,,,,,,,CommandType=typeof (SqliteCommand),
,,,,,,,,ParameterType=typeof (SqliteParameter),
,,,,,,,,ParameterDbType=typeof (DbType),
,,,,,,,,ParameterDbTypePropertyName=癉bType",
,,,,,,,,ParameterNamePrefix=癅",
,,,,,,,,ExceptionType=typeof (SqliteException),
,,,,,,,,BindByName=true
,,,,,,});

,,,,,,var属性=new NameValueCollection
,,,,,,{
,,,,,,,,(“quartz.jobStore.type")=癚uartz.Impl.AdoJobStore。JobStoreTX Quartz",
,,,,,,,,(“quartz.jobStore.useProperties")=皌rue",
,,,,,,,,(“quartz.jobStore.dataSource")=癲efault",
,,,,,,,,(“quartz.jobStore.tablePrefix")=癚RTZ_",
,,,,,,,,(“quartz.jobStore.driverDelegateType")=癚uartz.Impl.AdoJobStore。SQLiteDelegate Quartz",
,,,,,,,,(“quartz.dataSource.default.provider")=皊qlite-custom",
,,,,,,,,(“quartz.dataSource.default.connectionString")=?EqidManager.db"数据来源,
,,,,,,,,(“quartz.jobStore.lockHandler.type")=癚uartz.Impl.AdoJobStore。UpdateLockRowSemaphore Quartz",
,,,,,,,null   null   null

如何掌握Quartz.net分布式定时任务的姿势