Ausführung mehrerer Quartz.NET jobs mit Topshelf
Ich bin versucht, laufen mehrere Arbeitsplätze mit Quartz.NET und Topshelf mit C#.
HostFactory.Run(c =>
{
c.ScheduleQuartzJobAsService(q =>
q.WithJob(() => JobBuilder.Create<TypeA>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically().
ScheduleQuartzJobAsService(r =>
r.WithJob(() => JobBuilder.Create<TypeB>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically();
c.StartAutomatically();
c.SetServiceName("ServiceName");
});
Mithilfe der oben genannten code, nur die execute-Methode in TypeB ausgeführt. Ich habe auch versucht:
HostFactory.Run(c =>
{
c.ScheduleQuartzJobAsService(q =>
q.WithJob(() => JobBuilder.Create<TypeA>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically();
c.StartAutomatically();
c.SetServiceName("Service1");
c.ScheduleQuartzJobAsService(r =>
r.WithJob(() => JobBuilder.Create<TypeB>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically();
c.StartAutomatically();
c.SetServiceName("Service2");
});
Mit diesem code nur die execute-Methode in TypeB genannt wird. Meine beiden Klassen Typ a und TypeB haben 'Execute' - Methoden sind die Einstiegspunkte für jede Klasse (die aufgerufen werden, wenn Sie Teil eines Auftrags auf Ihre eigenen). Es scheint, dass egal welches service-code ist der zweite ist der, der immer dann aufgerufen wird, wenn ich die Reihenfolge tauschen der beiden ScheduleQuartzJobAsService fordert, es ist immer die Klasse, die im zweiten Aufruf, ausgeführt wird.
Wie kann ich schreiben, dass meine HostFactory.Run-Methode, so werden beide jobs parallel ausgeführt?
- Ich habe entdeckt, dass die zweite Methode wird nicht funktionieren, da "Sie können nur EINEN Dienst! Als der 3.x Topshelf das Basisprodukt nicht mehr zum hosten von mehreren Diensten.". Deshalb denke ich, dass ich, was ich wissen muss ist, wie die Ausführung mehrerer Aufträge in einen Dienst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
...
Mein problem war, dass ich die Vermischung der Konzepte der service-und job-Klassen. Sobald ich stellte meine
ContainerService
mitStart()
undStop()
Methoden bool, die true zurück, und ich riefScheduleQuartzJob
eher alsScheduleQuartzJobAsService
den obigen code war für mich als meineTypeA
undTypeB
bereits umgesetztIJob
.ContainerService
?ScheduleQuartzJob
unter einander?