Quartz.NET总结(四)Quartz 远程调度

  前面篇已经介绍了Quartz.NET的配置,使用和Cron表达式表达式的写法。基本上后台的定时任务的定时执行已经完成,并能正确的按照执行计划,执行相关的job 。

  然后,如果任务需要更新,停止某个任务呢 ? 总不能上服务器去改相关job 的配置吧。 所以,Quartz.NET 也给我们提供了远程调度的方法。这次就简单介绍下Quartz.NET 远程调度的配置和方法。

  

  1. 配置Quartz.NET 远程方式执行

    计划任务的服务器上配置远程调用Quartz的出口, quartz.config 增加如下配置即可

      #export this server to remoting context
      quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
      quartz.scheduler.exporter.port = 555
      quartz.scheduler.exporter.bindName = QuartzScheduler
      quartz.scheduler.exporter.channelType = tcp
      quartz.scheduler.exporter.channelName = httpQuartz

    几点说明:
      1. 客户端的"quartz.scheduler.proxy.address" 配置的地址由服务器上配置的channelType,port和 bindName 等组成。注意保持一致。

      2. 服务器初始化启动时,从数据库启动相关Job 的过程这里不细说。下次介绍我自己做的任务调度平台的时候,再细说。

      3. Job 服务器上,其实就算一个服务宿主,在后台控制调度全部的job 执行计划。

  2. 管理客户端

    a) 创建一个后台管理的客户端,可以是web网站。也可以是别的。
      初始化远程服务器上的全部Scheduler

        private static IScheduler scheduler = null;
        public static void InitRemoteScheduler()
        {
            try
            {
                NameValueCollection properties = new NameValueCollection();
                properties["quartz.scheduler.instanceName"] = "schedMaintenanceService";
                properties["quartz.scheduler.proxy"] = "true";
                properties["quartz.scheduler.proxy.address"] = string.Format("{0}://{1}:{2}/QuartzScheduler", scheme, server, port);
                ISchedulerFactory sf = new StdSchedulerFactory(properties);

                scheduler = sf.GetScheduler();
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("初始化远程任务管理器失败" + ex.StackTrace);
            }
        }        

    b) 增加,暂停,删除任务等操作

        /// <summary>
        /// 暂停任务
        /// </summary>
        /// <param name="JobKey"></param>
        public static void PauseJob(string JobKey)
        {
            try
            {
                JobKey jk = new JobKey(JobKey);
                if (scheduler.CheckExists(jk))
                {
                    //任务已经存在则暂停任务
                    scheduler.PauseJob(jk);
                    LogHelper.WriteLog(string.Format("任务“{0}”已经暂停", JobKey));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

    这里,只说了暂停的,只不过其他的都差不多。

  3. 其他

    另外,Quartz.NET提供了crystal-quartz  来实现远程管理。CrystalQuartz.Example.RemoteScheduler.Server 示例。感兴趣的朋友, 可以自己手动配置看看。

时间: 2024-08-27 16:34:29

Quartz.NET总结(四)Quartz 远程调度的相关文章

Topshelf结合Quartz.NET实现服务端定时调度任务

这周接受到一个新的需求:一天内分时间段定时轮询一个第三方WebAPI,并保存第三方WebAPI结果. 需求分析:分时段.定时开启.定时结束.轮询.主要工作集中在前三个上,轮询其实就是个Http请求,比较好解决. 技术选型: 1.最简单的方式:Windows Service.Timer.HttpClient. 2.B格高点的方式:Topshelf.Quartz.NET.HttpClient.之所以选用第二种方式的原因: 1.Windows Service尝试写了一个,发现附加进程调试确实麻烦,而且

Quartz使用(1) - 初识quartz

1. 背景 由于最新的工作项目中,需要使用quartz框架,以完成相关的任务的定时执行.经过两周的调研与使用,本系列博客会参考官网及网上相关博客,结合工作项目中的使用,详细介绍quartz的各个方面.如果有相关的错误,烦请不吝赐教.如果有相关的疑惑,可以评论,本人会抽空解答. 2. quartz是什么? Quartz is a richly featured, open source job scheduling library that can be integrated within vir

quartz配置参数org.quartz.jobStore.misfireThreshold含义解释

配置定时任务参数 quartz.properties文件时 需要配置jobStore的超过时间数 默认为60秒(这里单位为毫秒) org.quartz.jobStore.misfireThreshold = 60000 这个参数一般在多线程池条件下无效. 产生misfire失败的条件: 单线程执行定时任务 第一个任务的执行完后的结束时间 减去 第二个任务的开始时间 = 时间间隔 时间间隔 大于 60s时, 第二个任务不会被执行. 这个叫做失败临界值,或者临界时间 例如 设置quartz.prop

Git帮助文档阅读笔记----第二章-第四--节远程仓库的使用

管理这些远程仓库,以便推送或拉取数据 添加远程库 移除废弃的远程库 管理各式远程库分支 定义是否跟踪分支 查看当前的远程库 可以用 git remote 命令,它会列出每个远程库的简短名字 也可以加上 -v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址: 如果有多个远程仓库,此命令将全部列出.比如在我的 Grit 项目中,可以看到: 添加远程仓库 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname

Springmvc中配置Quartz使用,实现任务实时调度。

菜鸡的自我修炼,第一次接触quartz,做个记录.-------jstarseven 最近在项目中,第一次在springmvc中配置实用quartz,深刻的感受到quartz带来的方便,顺手做个记录. 简单介绍: Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联.整合了 Quartz 的应用程序可以重用来自不同事件的作业,

Quartz任务调度(2)CronTrigger定制个性化调度方案

Cron表达式 1. 时间字段与基本格式 Cron表达式有6或7个空格分割的时间字段组成: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ,-*/ 2 分支 0-59 ,-*?/ 3 小时 0-23 ,-*/ 4 日期 1-31 ,-*/LWC 5 月份 1-12或 JAN-DEC ,-*/ 6 星期 1-7 或 SUN-SAT ,-*?/LC# 7 年(可选) 1970-2099 ,-*/ 在月份和星期中,我们也可以使用英文单词的缩写形式 2. 特殊字符 在Cron表达式的时间字段

Quartz总结(四):动态修改定时器二

前文:http://www.cnblogs.com/LiuChunfu/p/5598806.html 提到了一种动态修改定时器的方法, 其本质就是在job方法中注入Schedular的对象,从Schedular中获取Trigger(触发器),然后修改触发器的条件,重新启动. 前文中的方法,其实已经涉及到了循环调用. Job类 => Job => Trigger => Schedular =>Job类. 这样是很容易发生问题的,也确实在实际项目中发生了问题,特别是当Schedular

四、远程连接与openssh

4.1.openssh简介 传统的网络程序都是采用明文传输数据和密码,如telnet.ftp等,存在很大的安全漏洞,黑客只需要使用一些数据包截取工具就可以获得包括密码在内的重要数据.正因如此,后来才出现了SSH (Secure shell,安全命令壳).SSH是由芬兰的一家公司所研发的加密通信协议,所有SSH传输的数据都是经过加密,可以有效防止数据的窃取以及'中间人'的攻击.SSH建立在应用层和传输层基础上的安全协议,监听tcp的22号端口,属于是文本协议.OpenSSH是SSH的替代软件,完全

git使用笔记(四)远程操作

By francis_hao    Nov 19,2016 以一张图说明远程操作,图片来自参考[2] git clone 从远端主机克隆一个版本库,若省略directory则生成一个和远端同名的版本库. $ git clone <repository> [directory] git clone支持的一些远端主机协议 $ git clone http[s]://example.com/path/to/repo.git/$ git clone ssh://example.com/path/to/