public static async Task Main(string[] args) { //Create our actor system and JobManager for the print job var actorSystem = ActorSystem.Create("print-job-system", Configuration.Config); var jobManager = actorSystem.ActorOf( Props.Create( () => new JobManager <PrintJobScheduler, PrintJobRunner, PrintJob, PrintJobId>( (() => new PrintJobScheduler()), () => new PrintJobRunner()))); var jobId = PrintJobId.New; var job = new PrintJob("repeated job"); var interval = TimeSpan.FromSeconds(10); var when = DateTime.UtcNow; //Create a message that will Ack with [Success] and will fail with [Failed] var scheduleMessage = new ScheduleRepeatedly <PrintJob, PrintJobId>(jobId, job, interval, when) .WithAck(Success.Instance) .WithNack(Failed.Instance); var scheduled = await jobManager.Ask <PrintJobResponse>(scheduleMessage); var result = scheduled .Match() .With <Success>(x => Console.WriteLine("Job was Scheduled")) .With <Failed>(x => Console.WriteLine("Job was NOT scheduled.")) .WasHandled; Console.ReadLine(); }
public void SchedulingJob_ForEvery5minutes_DispatchesJobMessage() { var probe = CreateTestProbe("job-probe"); var scheduler = (TestScheduler)Sys.Scheduler; var jobId = TestJobId.New; var greeting = $"hi here here is a random guid {Guid.NewGuid()}"; var job = new TestJob(greeting); var when = DateTime.UtcNow.AddDays(1); var fiveMinutes = TimeSpan.FromMinutes(5); Expression <Func <TestJobScheduler> > testJobSchedulerExpression = () => new TestJobScheduler(); Expression <Func <TestJobRunner> > testJobRunnerExpression = () => new TestJobRunner(probe); var testJobManager = Sys.ActorOf( Props.Create(() => new JobManager <TestJobScheduler, TestJobRunner, TestJob, TestJobId>( testJobSchedulerExpression, testJobRunnerExpression)) .WithDispatcher(CallingThreadDispatcher.Id)); var schedule = new ScheduleRepeatedly <TestJob, TestJobId>(jobId, job, fiveMinutes, when) .WithAck(TestJobAck.Instance) .WithNack(TestJobNack.Instance); testJobManager.Tell(schedule, probe); probe.ExpectMsg <TestJobAck>(); scheduler.AdvanceTo(when); probe.ExpectMsg <TestJobDone>(x => { x.At.Should().BeCloseTo(when); return(x.Greeting == greeting); }); scheduler.Advance(fiveMinutes); probe.ExpectMsg <TestJobDone>(x => { x.At.Should().BeCloseTo(when.Add(fiveMinutes)); return(x.Greeting == greeting); }); scheduler.Advance(fiveMinutes); probe.ExpectMsg <TestJobDone>(x => { x.At.Should().BeCloseTo(when.Add(fiveMinutes * 2)); return(x.Greeting == greeting); }); }