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
Antwort
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.
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.
- 1. Masstransit AzureServiceBus erzeugte Warteschlangen
- 2. Kontinuierliche Zufallsfragen?
- 3. Kontinuierliche Paginierung mit LongListSelector
- 4. Kontinuierliche Ganzzahl läuft
- 5. Was ist kontinuierliche Integration?
- 6. Kontinuierliche Integration und QA
- 7. kontinuierliche Integration mit MySQL
- 8. UICollectionView horizontale kontinuierliche Schleife
- 9. Enable Erkennung kontinuierliche Rede
- 10. R Shiny - Kontinuierliche Hintergrundaufgabe
- 11. Mac Mini - Kontinuierliche Integration
- 12. Kontinuierliche Animation einstellen
- 13. Was ist "kontinuierliche Implementierung"?
- 14. Kontinuierliche Tests mit Gradle
- 15. Kontinuierliche Verpackung mit Build
- 16. Kontinuierliche Schleifen von UIScrollViews?
- 17. Entscheidungsbaum kontinuierliche attributes
- 18. UWP kontinuierliche Spracherkennung
- 19. LoadError: Kontinuierliche Autoload
- 20. Kontinuierliche Spracherkennung Android
- 21. kontinuierliche Sequenzen in SQL
- 22. kontinuierliche Integration Web-Service
- 23. Kontinuierliche Jquery Rotationstransfer?
- 24. AVAssetWriter kontinuierliche Segmente
- 25. Python kontinuierliche TCP-Verbindung
- 26. kontinuierliche Nachricht empfangen asynctask
- 27. Facebook App, kontinuierliche Weiterleitung?
- 28. Bamboo Kontinuierliche Integration
- 29. Kontinuierliche Choroplethenkarte in Leaflet
- 30. Kontinuierliche Tastatureingabe in C
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
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. –
Ist Ihr Webjob ServiceBustrigger? – Thomas