2016-08-10 1 views
1

Ich habe einen kontinuierlichen Webjob, der zwei Webapps an zwei Standorten auf einem TimerTrigger ausführen muss. Wenn ich den Webjob von Visual Studio an beiden Standorten ausliefe, läuft alles gut und beide Webjobs laufen gleichzeitig.Octopus im Einsatz kontinuierliche WebJob nicht gleichzeitig an zwei Standorten ausgeführt

Jetzt bin ich bereit, diese mit Octopus-Deploy bereitzustellen. Ich habe erfolgreich einen Plan mit zwei Schritten erstellt, der das erledigt, und setzt die Assemblies an den richtigen Ort unter den Web-Apps (app_data\jobs\continuous\{jobname}) in Azure. Das Problem besteht darin, dass nur ein Web-Job seinen Job gleichzeitig ausführt, obwohl beide Web-Jobs den Status "Running" haben. Wenn ich die ausführende Datei stoppe und starte, beginnt der andere Webjob seinen Job auszuführen, während derjenige, den ich aus-/einschalte, den Status ausgeführt hat, aber seinen Job nie ausführt. Wenn ich nur einen von ihnen aus dem Visual Studio neu implementiere, führen beide ihre Jobs an beiden Standorten erneut aus.

Ich mache nichts mit Singletons und habe tatsächlich versucht, es auszuschalten, indem ich eine 'settings.job' Datei mit {is_singleton: false} benutze. Gibt es etwas, was Octopus mit dem Paket macht, das Azure denkt, dass der Webjob ein Singleton ist?

Antwort

2

Ich vermute, dass das Problem durch die Verwendung desselben Speicherkontos und derselben Host-ID für beide von Ihnen bereitgestellten Apps verursacht wird. Wenn Sie dies tun, betrachtet das WebJobs-SDK es als eine einzelne Webanwendung, die auf zwei Instanzen skaliert wurde, und stellt sicher, dass der Timer nur auf einer von ihnen ausgeführt wird.

Die einfachste Lösung besteht darin, für jede App ein anderes Speicherkonto zu verwenden.

+0

Sie haben Recht, ich habe separate Speicherkonten für jeden Webjob erstellt. Sobald ich die Verbindungszeichenfolgen geändert habe, haben beide ihre Aufgaben wie erwartet ausgeführt. Ich habe eine Folgefrage. Was ist die Host-ID? – Daryl

+0

@mathewc kann dies besser erklären als ich, also lasse ich ihn glänzen :) –

+0

HostId bezieht sich auf JobHostConfiguration.HostId (in Quelle [hier] (https://github.com/Azure/azure-webjobs-sdk/ Blob/Master/src/Microsoft.Azure.WebJobs.Host/JobHostConfiguration.cs # L106)). Im Grunde ist es eine ID, die von mehreren Instanzen desselben JobHosts geteilt wird. Die Laufzeitumgebung stellt sicher, dass alle Instanzen dieselbe ID haben. Das Singleton-Verhalten von TimerTrigger wird im Wiki [hier] (https://github.com/Azure/azure-webjobs-sdk-extensions/wiki/TimerTrigger) erklärt. – mathewc

Verwandte Themen