2014-09-29 4 views
0

Исключение ::: «Планировщик с именем« RemoteServer »уже существует».Клиентский сервер Quartz Scheduling

Я использую одноцветный узор. а также попробуйте по-разному, но когда я назову это один раз, он выполняется отлично, и моя работа выполняется хорошо. но когда я планирую второе задание, я исключаю, что я застрял в этой проблеме. «Планировщик с именем« RemoteServer »уже существует». Код Client ::

public void SchedulenewAlert() 
    { 
     try 
     { 
      NameValueCollection properties = new NameValueCollection(); 
      properties["quartz.scheduler.instanceName"] = "RemoteClient"; 
      properties["quartz.scheduler.instanceId"] = "AUTO"; 
      // set thread pool info 
     properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool,Quartz"; 
      properties["quartz.threadPool.threadCount"] = "5"; 
      properties["quartz.threadPool.threadPriority"] = "Normal"; 

      // set remoting expoter 
      properties["quartz.scheduler.proxy"] = "true"; 
properties["quartz.scheduler.proxy.address"] = "tcp://10.0.0.46:555/QuartzScheduler";/QuartzScheduler"; 
      // First we must get a reference to a scheduler 
      ISchedulerFactory sf = new StdSchedulerFactory(properties); 
      IScheduler sched = sf.GetScheduler(); 

      String jobname = "remotelyAddedJob2" + DateTime.Now.Ticks.ToString(); 
      IJobDetail job = JobBuilder.Create<MyTest>() 
       .WithIdentity(jobname, "default1") 
       .Build(); 

      JobDataMap map = job.JobDataMap; 
      map.Put("msg", "Your remotely added job has executed!"); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithIdentity("remotelyAddedTrigger", "default") 
       .ForJob(job.Key) 
       .WithCronSchedule("/5 * * ? * *") 
       .Build(); 

var TestTrigger = TriggerBuilder.Create().ForJob(job).WithIdentity("remotelyAddedTrigger2", "default1") 
       .StartNow().Build(); 


DateTimeOffset pullReportsToQueuejobCalendar = DateBuilder.DateOf(9, 30, 17, 1, 6, 2005); 
string trgName = "pullReportsFromQueuejobTrigger" + DateTime.Now.Ticks.ToString(); 
      var pullReportsToQueuejobTrigger = new CalendarIntervalTriggerImpl 
      { 
       StartTimeUtc = pullReportsToQueuejobCalendar, 
       Name = trgName, 
       RepeatIntervalUnit = IntervalUnit.Second, 
       RepeatInterval = 40000 // every --- seconds 
      }; 
      /// while (true) 
      // { 


      // schedule the job 
      sched.ScheduleJob(job, pullReportsToQueuejobTrigger); 

     } 
     catch (Exception ex) 
     { 
      string lines = "==================Exception Client===========================\n" + DateTime.Now.TimeOfDay.ToString() + "\n====================END=========================\n"; 
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\ExceptionClient.txt", true); 
      file.WriteLine(lines); 
      file.Close(); 
     } 
     ///} 
    } 

============================ сервера Код работы ....

public virtual void Execute(IJobExecutionContext context) 
    { 
     // This job simply prints out its job name and the 
     // date and time that it is running 
     try 
     { 
      string lines = "==================StartClient===========================\n" 
      + DateTime.Now.TimeOfDay.ToString() + "\n====================END=========================\n"; 
      System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\testClient.txt", true); 
      file.WriteLine(lines); 
      file.Close(); 
     } 
     catch(Exception ex) 
     { 

      string lines = "==================Exception at Client Calling===========================\n" 
      + DateTime.Now.TimeOfDay.ToString() + "\n====================END=========================\n"; 
      System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\testExceptionClient.txt", true); 
      file.WriteLine(lines); 
      file.WriteLine("EXception........... <<<< Message "+ex.Message); 
      file.Close(); 
} 
} 
+0

У меня есть решение только вопрос о доступе к модему :) –

ответ

0

Вы смешиваете логику для обработки вещей.
Вот хороший способ управлять Quartz

 public class SchedularHandler 
     { 

      private static IScheduler _scheduler; 

      public IScheduler Scheduler 
      { 
       get 
       { 
        if (_scheduler == null) 
         _scheduler = GetScheduler(); 
        return _scheduler; 
       } 

      } 
      public SchedularHandler() 
      { 

       if (_scheduler == null) 
        _scheduler = GetScheduler(); 

       if (!_scheduler.IsStarted) 
        _scheduler.Start(); 
      } 
      private NameValueCollection GetProperties() 
      { 
       NameValueCollection properties = new NameValueCollection(); 
       properties["quartz.scheduler.instanceName"] = "RemoteClient"; 
       properties["quartz.scheduler.instanceId"] = "AUTO"; 
       // set thread pool info 
       properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool,Quartz"; 
       properties["quartz.threadPool.threadCount"] = "5"; 
       properties["quartz.threadPool.threadPriority"] = "Normal"; 

       // set remoting expoter 
       properties["quartz.scheduler.proxy"] = "true"; 
       properties["quartz.scheduler.proxy.address"] = "tcp://10.0.0.46:555/QuartzScheduler"; 
       // First we must get a reference to a scheduler 
       return properties; 

      } 
      private IScheduler GetScheduler() 
      { 

       var properties = GetProperties(); 
       var sf = new StdSchedulerFactory(properties); 
       return sf.GetScheduler(); 

      } 
     public DateTimeOffset ScheduleJob(IJobDetail jobDetail, ITrigger trigger) 
     { 

      return _scheduler.ScheduleJob(jobDetail, trigger); 
     } 

     } 

///////////////////////////////// //////////////////////
Ваш ScheduleAndAlert() метод будет как то

public void SchedulenewAlert() 
    { 
     try 
     { 
      SchedularHanlder schedHandler = new SchedularHanlder() 

      String jobname = "remotelyAddedJob2" + DateTime.Now.Ticks.ToString(); 
      IJobDetail job = JobBuilder.Create<MyTest>() 
       .WithIdentity(jobname, "default1") 
       .Build(); 

      JobDataMap map = job.JobDataMap; 
      map.Put("msg", "Your remotely added job has executed!"); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithIdentity("remotelyAddedTrigger", "default") 
       .ForJob(job.Key) 
       .WithCronSchedule("/5 * * ? * *") 
       .Build(); 

     var TestTrigger =  TriggerBuilder.Create().ForJob(job).WithIdentity("remotelyAddedTrigger2", "default1") 
       .StartNow().Build(); 


DateTimeOffset pullReportsToQueuejobCalendar = DateBuilder.DateOf(9, 30, 17, 1, 6, 2005); 
string trgName = "pullReportsFromQueuejobTrigger" + DateTime.Now.Ticks.ToString(); 
      var pullReportsToQueuejobTrigger = new CalendarIntervalTriggerImpl 
      { 
       StartTimeUtc = pullReportsToQueuejobCalendar, 
       Name = trgName, 
       RepeatIntervalUnit = IntervalUnit.Second, 
       RepeatInterval = 40000 // every --- seconds 
      }; 
      /// while (true) 
      // { 


      // schedule the job 
      schedHandler.ScheduleJob(job, pullReportsToQueuejobTrigger); 

     } 
     catch (Exception ex) 
     { 
      string lines = "==================Exception Client===========================\n" + DateTime.Now.TimeOfDay.ToString() + "\n====================END=========================\n"; 
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\ExceptionClient.txt", true); 
      file.WriteLine(lines); 
      file.Close(); 
     } 
     ///} 
    } 
1

Это сделал трюк для меня:

IScheduler sched = sf.GetScheduler("scheduler name"); 
     if (sched == null) 
     { 
      sched = sf.GetScheduler(); 
     } 
Смежные вопросы