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:
- Alle Verlage die veröffentlichen gleiche Nachrichtentyp
- 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:
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/
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?
Vielen Dank für Ihre Antwort, was ist der grundlegende Unterschied zwischen IBus.Publish und IBus.Send? – Matt
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
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). –