一. 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. Proxmox VE登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.

    问题描述: 用的是免费版的,所以每次都提示这个没有有效的订阅挺烦的 解决方法: 修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib. ...

  2. Windows系统资源监控

    1.windows自带系统资源监控工具 2.Windows监控的数据来源:Performance Counters 2.1 Performance Counter架构 2.2 Performance ...

  3. 爬虫之Requests&beautifulsoup

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  4. nmap比较详细的使用方法

    nmap 信息收集工具 -sP 192.168.1.0/24  区域网内存活主机扫描  -O 192.168.1.1    获取操作系统 nmap -sS -sV baidu.com    -sS 使 ...

  5. js 批量替换

    html = html.replace(new RegExp(title,"gm"), "<span style='color:red;'>"+ti ...

  6. zabbix 主动模式和被动模式说名

    一.zabbix agent主动模式与被动模式的区别 zabbix agent的运行模式有以下两种:1.被动模式:此模式为zabbix默认的工作模式,由zabbix server 向zabbix ag ...

  7. SQLi “百度杯”CTF比赛 九月场

    试一下1=1 发下username为空,说明哪里出问题了,是没有注入吗?还是被过滤了?试一下#号的url编码%23 编码后,返回的结果是对的,证明是的,有注入 1=2就返回空了 看了wp,就觉得自己的 ...

  8. P1546 最短网络 Agri-Net题解(克鲁斯卡尔)

    P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...

  9. Linux内核入门到放弃-Ext2数据结构-《深入Linux内核架构》笔记

    Ext2文件系统 物理结构 结构概观 块组是该文件系统的基本成分,容纳了文件系统的其他结构.每个文件系统都由大量块组组成,在硬盘上相继排布: ----------------------------- ...

  10. CentOS7.4使用KVM

    参考地址 [root@node1 ~]# cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) [root@node1 ~]# un ...