Heute hatte ich meinen ersten Kontakt mit NServiceBus, nachdem ich mir in einigen Stunden das Konzept zu Gemüte geführt hatte. Primär dienten mir dazu die zwei Udi Dahan Videos. Da ich sehr begeistert davon war, habe ich sogleich einen Webcast erstellt. Persönlich denke ich, dass NServiceBus im .NET Umfeld durchaus in der Technologie-Evaluierung einbezogen werden sollte, wenn es um asynchrone und langlaufende Prozesse (sogenannte Sagas) geht. NServiceBus ist in gewissem Rahmen kostenfrei und steht als NuGet Package zur Verfügung. Die eigentliche Installation läuft sehr leicht von der Hand, da (wie man es selbst auch mit TopShelf bewerkstelligen kann) die erzeugte EXE für den Host bereits sämtliche Logik zur Installation enthält.
Für die Erstinstallation einfach den Parameter /installInfrastructure anhängen. Hier die Auflistung sämtlicher Parameter, die besagter Host enthält:
Besonders hervorzuheben ist die Tatsache, dass es NServiceBus absichtlich erschwert eine schlechte Architektur zu implementieren. So erhält der Client beim Verschicken eines Commands über Bus.Send lediglich als Rückgabewert ein ICallback Object, das es lediglich ermöglicht auf Fehler zu prüfen. Damit ist man gezwungen separat eine entsprechende Logikeinheit zu implementieren, die zur Verarbeitung des Events dient.
Gleichfalls wird quasi dazu eingeladen Code mit transaktionalem Verhalten in einer UnitOfWork unterzubringen und IoC zu verwenden.
Weitere nette Features:
- Fluent API
- Fördern des Convention over Configuration Principles
- Trennung von Admin und Developer Verantwortungsbereichen
- Eingebauter IoC Container (AutoFac)
- Schnelle DB in Form von RavenDB mitgeliefert
- Sinnvoll Benamsung wie IWantCustomInitialization
Das sind nur einige Punkte, die mir gefallen!
Für mich wären jetzt 2 weitere wesentliche Schritte:
- Eigenen IoC Container einhängen, wie hier gezeigt (sehr elegant!)
- Konfiguration der Clients im Code, um die Config beispielsweise aus der DB beim Bootstrapping zu lesen. Dies ist wohl nicht ganz trivial bzw. nicht angedacht (falls doch, bitte Info an mich!)