日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第九节: 利用RemoteScheduler实现Sheduler的远程控制

發(fā)布時(shí)間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第九节: 利用RemoteScheduler实现Sheduler的远程控制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. RemoteScheduler遠(yuǎn)程控制

1. 背景: 在A服務(wù)器上部署了一個(gè)Scheduler,我們想在B服務(wù)器上控制這個(gè)Scheduler。

2. 猜想: A服務(wù)器上的Scheduler需要有地址、需要有端口、需要有名稱(chēng)(實(shí)際上也是如此)。

3. 需求: 一個(gè)控制臺(tái)程序作為服務(wù)端運(yùn)行A服務(wù)器上(也可以部署成服務(wù)),用另一個(gè)B服務(wù)器上的Web端控制來(lái)控制這個(gè)Scheduler的暫停、繼續(xù)等操作。

4. 具體實(shí)現(xiàn)

  ①:A服務(wù)器上的Server端的Scheduler需要配置port和bindName兩個(gè)核心參數(shù),用來(lái)對(duì)外公開(kāi)。

  ②:B服務(wù)器上Client端的Scheduler的創(chuàng)建需要使用代理,并配置其地址(A服務(wù)器上對(duì)外公開(kāi)的)。

(原理:通過(guò)代理獲取A服務(wù)器中的Scheduler,然后獲取里面的job和trigger,然后可以配置job和trigger的開(kāi)啟、關(guān)閉、編輯等,這里以操控job的暫停和繼續(xù)為例,介紹其使用思路,詳細(xì)的如何操控trigger或者編輯等,詳解后面框架章節(jié))

?代碼分享:

(1). A服務(wù)器上,即被控制端的Server端,這里我們用控制臺(tái)程序代替。

 ?(PS:核心點(diǎn)就是StdSchedulerFactory類(lèi)需要配置 type、port、bindName )

1 public class RemoteSchedulerServer2 {3 public static void ShowRemoteScheduler()4 {5 //1. 配置調(diào)度器工廠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. 創(chuàng)建調(diào)度器 13 var scheduler = schedulerFactory.GetScheduler(); 14 //3. 配置job和trigger并開(kāi)啟 15 var job = JobBuilder.Create<HelloJob4>() 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服務(wù)器,即Client端,用來(lái)操控A服務(wù)器上Scheduler,下面的代碼我在操控job暫停和繼續(xù)的時(shí)候,直接把jobName和GroupName寫(xiě)死了,這里只是為了演示用法而已,實(shí)際上可以通過(guò)遠(yuǎn)程代理創(chuàng)建的scheduler來(lái)獲取所有的job和trigger的。

??(PS:核心點(diǎn)就是StdSchedulerFactory類(lèi)需要配置 代理,并配置代理地址,即A服務(wù)器的地址、port、bindName )

1 public class RemoteSchedulerController : Controller2 { 3 /// <summary>4 /// 前端頁(yè)面5 /// </summary>6 /// <returns></returns>7 public ActionResult Index()8 {9 return View(); 10 } 11 /// <summary> 12 /// 使用代理的方式創(chuàng)建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 /// (這里直接從前端默認(rèn)把名稱(chēng)傳過(guò)來(lái),實(shí)際可以從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 /// 恢復(fù)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 <html>2 <head>3 <meta name="viewport" content="width=device-width" />4 <title>Index</title>5 <script src="~/Scripts/jquery-1.10.2.min.js"></script>6 <script>7 $(function () {8 //1. 暫停9 $("#btn1").on("click", function () { 10 $.post("PauseJob", { "jobName": "myJob1", "groupName": "jobGroup1" }, function (data) { 11 if (data=="ok") { 12 alert("暫停成功"); 13 } else { 14 alert("失敗了"); 15 } 16 }); 17 }); 18 //2. 繼續(xù) 19 $("#btn2").on("click", function () { 20 $.post("ResumeJob", { "jobName": "myJob1", "groupName": "jobGroup1" }, function (data) { 21 if (data == "ok") { 22 alert("繼續(xù)成功"); 23 } else { 24 alert("失敗了"); 25 } 26 }); 27 }); 28 }); 29 </script> 30 </head> 31 <body> 32 <div> 33 遠(yuǎn)程操控另一個(gè)服務(wù)器端的Sheduler 34 </div> 35 <p></p><p></p><p></p> 36 <button id="btn1">暫停</button> 37 <button id="btn2">繼續(xù)</button> 38 </body> 39 </html>

?

(3). 運(yùn)行結(jié)果

?

?

總結(jié)

以上是生活随笔為你收集整理的第九节: 利用RemoteScheduler实现Sheduler的远程控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。