2016-11-24 5 views
1

Gibt es eine Möglichkeit, einen fortlaufenden Webjob anzuhalten - um den Empfang von Nachrichten vom Servicebus für Zeitintervalle zu stoppen? Ich habe ein System, das Postdaten ständig empfängt. Dann werden die geposteten Daten an den Servicebus gesendet. Ich frage mich, ob es eine Möglichkeit gibt, die Verarbeitung der Nachrichten zu stoppen. Natürlich wäre die andere Lösung, diese Nachrichten nicht zu senden - halten Sie sie im Sendersystem in einer Warteschlange.Azure-Servicebus Kontinuierliche WebJob-Pause

+0

Ich würde etwas wie das Erstellen eines Zeitrahmens erraten und überprüfen, ob der Zeitrahmen mit der aktuellen Zeit übereinstimmt und nichts tut, wenn es stimmt – 4c74356b41

+0

ja, aber wenn ich das tue, erhalte ich immer noch die Nachricht. Scheint nicht die eleganteste Lösung. Vielleicht ist es am besten, nicht einmal die Nachricht zu senden, aber ich frage mich, ob es einen besseren Weg gibt, da ich keine Zeit verbringen will, um Warteschlangenmechanismus zu implementieren. –

+0

Ist Ihr Webjob ServiceBustrigger? – Thomas

Antwort

1

Sie können den Webjob stoppen, indem Sie WEBJOBS_STOPPED in Ihren Anwendungseinstellungen auf 1 setzen. Das ist ein bisschen grob, aber es stoppt den Webjob.

0

Sie haben bereits den Warteschlangenmechanismus ... den Servicebus. Es klingt, als ob Sie sich deklarativ mit der Warteschlange verbinden, indem Sie das ServiceBusTrigger-Attribut verwenden. das heißt

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log) 

Aber dies ist nicht die einzige Möglichkeit, eine Nachricht in einem kontinuierlichen webjob zu erhalten. Sie können ein QueueClient Objekt verwenden diese Nachrichten nur so leicht zu erhalten:

var connectionString = "//connection string here//"; 
var queueName = "samplequeue"; 

var client = QueueClient.CreateFromConnectionString(cnStr, queueName); 

client.OnMessage(message => 
{ 
    string msg = message.GetBody<string>(); 
    // Process message here... 
}); 

Console.ReadLine(); 

(https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues Siehe für weitere Informationen.)

Also in Ihrem webjob, können Sie auf zwei Busse hören: die erste ist die operative Bus, den Sie bereits verwenden, um Ihre Geschäftsnachrichten zu verarbeiten. Das neue Thema ist ein Kontrollbus. Es hört immer zu, aber Sie senden ihm nur eine Nachricht, wenn Sie das Verhalten der Warteschlange ändern möchten.

So senden Sie "START" an den Steuerbus. Der Empfang dieser Nachricht würde den obigen Code aufrufen und den betriebsbereiten Bus veranlassen, mit der Verarbeitung von Nachrichten zu beginnen.

Wenn Sie die Verarbeitung stoppen möchten, senden Sie "STOP" an den Steuerbus. Wenn diese Nachricht empfangen wird, rufen Sie client.Close(); auf dem Betriebsbus auf. Dies pausiert die Verarbeitung der Nachrichten, bis die nächste "START" -Nachricht empfangen wird.

Natürlich können Sie dies erweitern. Sie könnten zum Beispiel "PAUSE 10 MINUTEN" an den Steuerbus senden, der den betriebsbereiten Bus stoppen könnte, und dann einen Timer setzen, um ihn 10 Minuten später neu zu starten. Du bist nur durch deine Vorstellungskraft begrenzt!

Persönlich würde ich wahrscheinlich Json Nachrichten anstelle von Klartext verwenden, aber was auch immer Ihren Bedürfnissen entspricht.