Ich habe eine Service Broker-Anwendung, die derzeit 5 oder 6 Warteschlangen auf zwei Servern hat.
Der allgemeine Workflow lautet:
Server A.
- Der Benutzer füllt einige Tabellen
- Der Benutzer löst einen gespeicherten Prozess aus, der eine Nachricht in eine Header-Warteschlange stellt, die angibt, dass noch Arbeit zu erledigen ist
- Der Broker liest aus dieser Header-Warteschlange und erstellt eine möglicherweise große Anzahl von Nachrichten, die an Server B gesendet werden sollen
Server B.
- Alle Nachrichten werden in eine Warteschlange gestellt
- In dieser Warteschlange wird die Nachricht untersucht und entbündelt, die Nutzdaten werden ausgeführt und eine Antwort wird von einem anderen Satz von Prozessen / Tabellen gesammelt, mit denen wir interagieren
- Die Antwortnachricht wird erstellt und an Server A zurückgesendet
Server A.
- Antwortnachrichten werden in eine spezielle Warteschlange gestellt und zum Aktualisieren von Tabellen verwendet, die der Benutzer oben ausgefüllt hat
- Enddialognachrichten werden aus der Initiatorwarteschlange gelesen und zum Aktualisieren einer anderen Tabelle verwendet, die den Fortschritt eines Headerdatensatzes verfolgt (dh 50 von 100 verarbeiteten Nachrichten).
- Wenn wir feststellen, dass der Header-Datensatz vollständig verarbeitet wurde, wird eine neue Nachricht an eine andere Warteschlange gesendet, die eine Benachrichtigungs-E-Mail sendet
Ich hatte die Empfehlung, einige dieser Warteschlangen auf Server A zu konsolidieren, und bin mir nicht sicher, welche Vorgehensweise hierfür am besten geeignet ist. Zwei der Warteschlangen haben ein relativ hohes Volumen an Nachrichtenverarbeitung, und die E-Mail-Warteschlange ist ziemlich langsam.
Wir haben (glaube ich) gute Arbeit bei der Verwaltung von Nachrichtentypen geleistet, sodass wir theoretisch alles in eine Warteschlange stellen konnten und die Anwendung weiterhin funktionieren würde.
Gibt es eine bewährte Methode, wann separate Warteschlangen verwaltet und wann in einem solchen Szenario konsolidiert werden müssen?