5

Wir versuchen, eine elegante Lösung für das Melden von Ausnahmen zu finden, die von Systemen in unserer Infrastruktur generiert werden, die einfacher zu bedienen ist als das Anzeigen von E-Mails oder das Überprüfen von Protokolldateien. Das Publish/Subscribe-Modell über einen Servicebus würde dieses Problem recht gut lösen. Dienste würden Fehler/Ereignisse veröffentlichen, und ein Subriber könnte diese Nachrichten mit einem einfachen Mustervergleich filtern.NServiceBus Publish/Subscribe

Wir haben das NServiceBus Projekt untersucht, und die Frage, ob wäre es unsere Anforderungen zu erreichen, bei der PubSub Probe suchen (http://docs.particular.net/samples/pubsub/) wir es nicht die folgenden beiden Szenarien bemerkt haben zu lösen:

  1. Alle Verlage die veröffentlichen gleiche Nachrichtentyp
  2. der Teilnehmer sollte nicht erfordern die Kenntnis des Herausgebers Endpunkte

wir haben es geschafft, diese Anforderungen zu erreichen, aber wir sind nicht sicher, ob die Konfiguration ist cor rect. Im Folgenden sind unsere Lösungen:

  1. Alle Publisher die gleichen Abonnement Speicherkonfiguration (DBSubscriptionStorage) teilen, die eine gemeinsame Datenbank, wie im Abonnement Speicher Abschnitt der Dokumentation beschrieben http://docs.particular.net/nservicebus/messaging/publish-subscribe/

  2. Alle Herausgeber/Abonnent sind für die Verwendung eines Verteilers konfiguriert, wie in der Dokumentation auf der nservicebus-Website beschrieben.

Wir würden gerne wissen, ob dies die richtige Umsetzung des NServiceBus ist Modell Publish/Subscribe, oder ob es vielleicht eine andere Lösung, die unsere Ziele acheive würde?

Antwort

2

hier Dies wurde auf der Diskussionsgruppe diskutiert:

http://nservicebus.grouply.com/message/7059

Kurz gesagt, würden Sie jeden Knoten senden eher auf einen einzelnen Endpunkt als veröffentlichen.

Hoffe, dass hilft.

+0

Vielen Dank für Ihre Antwort, was ist der grundlegende Unterschied zwischen IBus.Publish und IBus.Send? – Matt

+0

Wenn Sie unser Fehlerszenario für eine Minute ignorieren, sollten Sie vielleicht ein System zur Auftragsabwicklung in Betracht ziehen, bei dem eine Gruppe von Diensten Benachrichtigungen über Bestellungen, die sie bearbeitet haben, veröffentlicht. Wenn wir dieselbe Bestellbenachrichtigungsnachricht von mehreren Publishern an mehrere Abonnenten veröffentlichen würden, wäre die Freigabe von Subskriptionsspeichern die richtige Implementierung. Wenn Abonnenten unsere Nachricht abonnieren, werden die Abonnements dem freigegebenen Speicher hinzugefügt, und alle Publisher dieser bestimmten Nachricht beginnen mit der Veröffentlichung für unsere Abonnenten. Dies scheint zu funktionieren, aber ist es richtig? – Matt

+3

Matt - Ich denke, du kombinierst die Idee von mehreren * physischen * Veröffentlichungsknoten mit mehreren * logischen * Veröffentlichungsdiensten.NServiceBus erzwingt einen einzelnen logischen Veröffentlichungsdienst, erlaubt aber in diesem Dienst so viele physische Knoten wie Sie möchten (automatisch im Produktionsprofil festgelegt, dies manuell, indem Sie DbSubscriptionStorage verwenden). IBus.Publish wird auch verwendet, um Ereignisse zu kommunizieren, die * bereits * passiert sind, während Send verwendet wird, um etwas anzufordern, was passieren soll (aber abgelehnt werden kann). Ereignisse können nicht zurückgewiesen werden (wie sie bereits aufgetreten sind). –

0

Sie könnten Nachrichten in das Windows-Ereignisprotokoll schreiben und ein Tool wie OpManger verwenden, um nach Fehlern/Warnungen in den Protokollen zu suchen.

Zusätzliche Vorteile sind OpManager kann Prozesse überwachen, Netzwerk-Ports, so dass Sie andere Fehler erkennen können. Es unterstützt auch E-Mail-Warnungen und hat eine nette WebUI.