一. RemoteScheduler远程控制

1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上控制这个Scheduler。

2. 猜想: A服务器上的Scheduler需要有地址、需要有端口、需要有名称(实际上也是如此)。

3. 需求: 一个控制台程序作为服务端运行A服务器上(也可以部署成服务),用另一个B服务器上的Web端控制来控制这个Scheduler的暂停、继续等操作。

4. 具体实现

  ①:A服务器上的Server端的Scheduler需要配置port和bindName两个核心参数,用来对外公开。

  ②:B服务器上Client端的Scheduler的创建需要使用代理,并配置其地址(A服务器上对外公开的)。

(原理:通过代理获取A服务器中的Scheduler,然后获取里面的job和trigger,然后可以配置job和trigger的开启、关闭、编辑等,这里以操控job的暂停和继续为例,介绍其使用思路,详细的如何操控trigger或者编辑等,详解后面框架章节)

 代码分享:

(1). A服务器上,即被控制端的Server端,这里我们用控制台程序代替。

  (PS:核心点就是StdSchedulerFactory类需要配置 type、port、bindName )

  public class RemoteSchedulerServer
{
public static void ShowRemoteScheduler()
{
//1. 配置调度器工厂
var schedulerFactory = new StdSchedulerFactory(new NameValueCollection()
{
{"quartz.scheduler.exporter.type","Quartz.Simpl.RemotingSchedulerExporter,Quartz" },
{"quartz.scheduler.exporter.port","" },
{"quartz.scheduler.exporter.bindName","QuartzScheduler" },
});
//2. 创建调度器
var scheduler = schedulerFactory.GetScheduler();
//3. 配置job和trigger并开启
var job = JobBuilder.Create<HelloJob4>()
.WithIdentity("myJob1", "jobGroup1")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("myJobTrigger1", "triggerGroup1")
.StartNow()
.WithCronSchedule("/1 * * ? * *")
.Build();
scheduler.ScheduleJob(job, trigger);
scheduler.Start();
}
}

(2). B服务器,即Client端,用来操控A服务器上Scheduler,下面的代码我在操控job暂停和继续的时候,直接把jobName和GroupName写死了,这里只是为了演示用法而已,实际上可以通过远程代理创建的scheduler来获取所有的job和trigger的。

 (PS:核心点就是StdSchedulerFactory类需要配置 代理,并配置代理地址,即A服务器的地址、port、bindName )

  public class RemoteSchedulerController : Controller
{
/// <summary>
/// 前端页面
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
return View();
}
/// <summary>
/// 使用代理的方式创建Sheduler
/// </summary>
static IScheduler scheduler = null;
public RemoteSchedulerController()
{
var schedulerFactory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
{
{"quartz.scheduler.proxy","true" }, //使用代理
{"quartz.scheduler.proxy.Address","tcp://localhost:5555/QuartzScheduler" } //Server端的地址是多少,localhost就是多少
});
scheduler = schedulerFactory.GetScheduler();
scheduler.Start();
}
/// <summary>
/// 暂停Job
/// (这里直接从前端默认把名称传过来,实际可以从scheduler中拿到)
/// </summary>
/// <returns></returns>
public ActionResult PauseJob(string jobName, string groupName)
{
try
{
scheduler.PauseJob(new JobKey(jobName, groupName));
return Content("ok");
}
catch (Exception)
{ return Content("error");
} }
/// <summary>
/// 恢复Job
/// </summary>
/// <returns></returns>
public ActionResult ResumeJob(string jobName, string groupName)
{
try
{
scheduler.ResumeJob(new JobKey(jobName, groupName));
return Content("ok");
}
catch (Exception)
{ return Content("error");
}
}
}
 <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
//1. 暂停
$("#btn1").on("click", function () {
$.post("PauseJob", { "jobName": "myJob1", "groupName": "jobGroup1" }, function (data) {
if (data=="ok") {
alert("暂停成功");
} else {
alert("失败了");
}
});
});
//2. 继续
$("#btn2").on("click", function () {
$.post("ResumeJob", { "jobName": "myJob1", "groupName": "jobGroup1" }, function (data) {
if (data == "ok") {
alert("继续成功");
} else {
alert("失败了");
}
});
});
});
</script>
</head>
<body>
<div>
远程操控另一个服务器端的Sheduler
</div>
<p></p><p></p><p></p>
<button id="btn1">暂停</button>
<button id="btn2">继续</button>
</body>
</html>

(3). 运行结果

第九节: 利用RemoteScheduler实现Sheduler的远程控制的更多相关文章

  1. 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联

    第九节: 利用RemoteScheduler实现Sheduler的远程控制   一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...

  2. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第九节

    原文链接 第九节:使用CUDA拓展高等级语言 Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的 ...

  3. JAVA 年轻代收集器 第九节

    JAVA 年轻代收集器  第九节 继续上一章所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程.如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低. 因此我 ...

  4. centos 文档的压缩和打包 gzip,bzip2,xz,zip,unzip,tar,tgz 第九节课

    centos  文档的压缩和打包   gzip,bzip2,xz,zip,unzip,tar,tgz  第九节课 SAS盘可以支持热插拔,看机器 tar.zip.tar -czvf 不会动源文件,gz ...

  5. 《C Prime Plus》第九节笔记

    第九节 函数 9.1 复习函数 函数原型 function prototype 函数调用 function call 函数定义 function definition 形参 实参 典型的ANSI C函 ...

  6. [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38537431 本文作者:sushengmiyan ------------------ ...

  7. 第九节:基于MVC5+AutoFac+EF+Log4Net的基础结构搭建

    一. 前言 从本节开始,将陆续的介绍几种框架搭建组合形式,分析每种搭建形式的优势和弊端,剖析搭建过程中涉及到的一些思想和技巧. (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:E ...

  8. java第九节 网络编程的基础知识

    /** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...

  9. 第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头

    一. 引言 在<第14.3节 使用google浏览器获取网站访问的http信息>和<第14.4节 使用IE浏览器获取网站访问的http信息>中介绍了使用Google浏览器和IE ...

随机推荐

  1. keepalived+nginx负载均衡+ApacheWeb实现高可用

    1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...

  2. Bootstrap -- 缩略图、进度条、列表组、面板

    Bootstrap -- 缩略图.进度条.列表组.面板 1. 缩略图 大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap ...

  3. LeetCode算法题-Second Minimum Node In a Binary Tree(Java实现)

    这是悦乐书的第285次更新,第302篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第153题(顺位题号是671).给定非空的特殊二叉树,其由具有非负值的节点组成,其中该树 ...

  4. Ubuntu下安装JDK详细教程

    Ubuntu下安装JDK详细教程 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ Ubuntu版本:Ubuntu-12.04.5-desktop-i386 ...

  5. css_属性

    老师的博客:https://www.cnblogs.com/liwenzhou/p/7999532.htm css的属性 整体属性的:作用于全局 width:表示宽 height:表示长 color: ...

  6. call()与apply()区别typeof和instanceof的区别

    摘自 http://www.cnblogs.com/qzsonline/archive/2013/03/05/2944367.html 一.方法的定义 call方法: 语法:call(thisObj, ...

  7. slice()和splice()区别

    1.slice(start,end):方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素. 注意:该方法不会改变原数组,而是返回一个子数组,如果想删除 ...

  8. 重建二叉树[by Python]

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2 ...

  9. Zabbix 3.4.7针对一些主机设置期间维护

    场景说明: 由于公司有些主机设置了定时开机关机,每次开机关机得时候都会发邮件告警,每次都需要值班人员提醒,为了处理这种无效告警,可以在zabbix中设置维护 zabbix中的维护---维护期间:用来设 ...

  10. nodeJS之crypto模块md5和Hmac加密

    nodeJS之crypto模块md5和Hmac加密 原文地址:https://www.cnblogs.com/tugenhua0707/p/9128690.html 在nodejs中,可以使用cryp ...