微信 公众号 微网站开发汕头网站推广教程
web/
2025/10/6 9:43:32/
文章来源:
微信 公众号 微网站开发,汕头网站推广教程,wordpress是国外服务器吗,网站排版策划一. RemoteScheduler远程控制
1. 背景#xff1a; 在A服务器上部署了一个Scheduler#xff0c;我们想在B服务器上控制这个Scheduler。
2. 猜想#xff1a; A服务器上的Scheduler需要有地址、需要有端口、需要有名称(实际上也是如此)。
3. 需求#xff1a; 一个控制台程序…一. 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 ) 1 public class RemoteSchedulerServer2 {3 public static void ShowRemoteScheduler()4 {5 //1. 配置调度器工厂6 var schedulerFactory new StdSchedulerFactory(new NameValueCollection()7 {8 {quartz.scheduler.exporter.type,Quartz.Simpl.RemotingSchedulerExporter,Quartz },9 {quartz.scheduler.exporter.port,5555 },
10 {quartz.scheduler.exporter.bindName,QuartzScheduler },
11 });
12 //2. 创建调度器
13 var scheduler schedulerFactory.GetScheduler();
14 //3. 配置job和trigger并开启
15 var job JobBuilder.CreateHelloJob4()
16 .WithIdentity(myJob1, jobGroup1)
17 .Build();
18 var trigger TriggerBuilder.Create()
19 .WithIdentity(myJobTrigger1, triggerGroup1)
20 .StartNow()
21 .WithCronSchedule(/1 * * ? * *)
22 .Build();
23 scheduler.ScheduleJob(job, trigger);
24 scheduler.Start();
25 }
26 } (2). B服务器即Client端用来操控A服务器上Scheduler下面的代码我在操控job暂停和继续的时候直接把jobName和GroupName写死了这里只是为了演示用法而已实际上可以通过远程代理创建的scheduler来获取所有的job和trigger的。 (PS:核心点就是StdSchedulerFactory类需要配置 代理并配置代理地址即A服务器的地址、port、bindName ) 1 public class RemoteSchedulerController : Controller2 { 3 /// summary4 /// 前端页面5 /// /summary6 /// returns/returns7 public ActionResult Index()8 {9 return View();
10 }
11 /// summary
12 /// 使用代理的方式创建Sheduler
13 /// /summary
14 static IScheduler scheduler null;
15 public RemoteSchedulerController()
16 {
17 var schedulerFactory new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
18 {
19 {quartz.scheduler.proxy,true }, //使用代理
20 {quartz.scheduler.proxy.Address,tcp://localhost:5555/QuartzScheduler } //Server端的地址是多少localhost就是多少
21 });
22 scheduler schedulerFactory.GetScheduler();
23 scheduler.Start();
24 }
25 /// summary
26 /// 暂停Job
27 /// 这里直接从前端默认把名称传过来实际可以从scheduler中拿到
28 /// /summary
29 /// returns/returns
30 public ActionResult PauseJob(string jobName, string groupName)
31 {
32 try
33 {
34 scheduler.PauseJob(new JobKey(jobName, groupName));
35 return Content(ok);
36 }
37 catch (Exception)
38 {
39
40 return Content(error);
41 }
42
43 }
44 /// summary
45 /// 恢复Job
46 /// /summary
47 /// returns/returns
48 public ActionResult ResumeJob(string jobName, string groupName)
49 {
50 try
51 {
52 scheduler.ResumeJob(new JobKey(jobName, groupName));
53 return Content(ok);
54 }
55 catch (Exception)
56 {
57
58 return Content(error);
59 }
60 }
61 } 1 html2 head3 meta nameviewport contentwidthdevice-width /4 titleIndex/title5 script src~/Scripts/jquery-1.10.2.min.js/script6 script7 $(function () {8 //1. 暂停9 $(#btn1).on(click, function () {
10 $.post(PauseJob, { jobName: myJob1, groupName: jobGroup1 }, function (data) {
11 if (dataok) {
12 alert(暂停成功);
13 } else {
14 alert(失败了);
15 }
16 });
17 });
18 //2. 继续
19 $(#btn2).on(click, function () {
20 $.post(ResumeJob, { jobName: myJob1, groupName: jobGroup1 }, function (data) {
21 if (data ok) {
22 alert(继续成功);
23 } else {
24 alert(失败了);
25 }
26 });
27 });
28 });
29 /script
30 /head
31 body
32 div
33 远程操控另一个服务器端的Sheduler
34 /div
35 p/pp/pp/p
36 button idbtn1暂停/button
37 button idbtn2继续/button
38 /body
39 /html (3). 运行结果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87838.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!