"As friendly as machinely possible."
These are the goals - Rebus should have:
- a simple and intuitive configuration story
- a few well-selected options
- no doodleware
- dependency only on .NET 4.5
- integration with external dependencies via small and dedicated projects
- the best error messages
- a frictionless getting-up-and-running-experience
and in doing this, Rebus should align very well with the NServiceBus way of doing things, which I like, thus allowing users (myself included) to easily migrate to NServiceBus at some point in a project's lifetime if Rebus for some reason falls short (which I don't think it will).
Oh, and Rebus is free as in beer and speech.
Because I wanted to build the .NET service bus that I would have the patience to work with every day, probably for several years to come. And I can be very impatient with my tools, so the most solemn goal of Rebus is that it should stay out of my way - and I think it does that just right!
One day, maybe I'll tweet something as well... @mookid8000
Rebus is a simple .NET library, and everything revolves around the
RebusBus class. One way to get Rebus up and running, is to manually go
var bus = new RebusBus(...); bus.Start(); // use the bus for the duration of the application lifetime // remember to dispose the bus when your application exits bus.Dispose();
... is a bunch of dependencies that vary depending on how you want to send/receive messages etc. Another way is to use the configuration API, in which case you would go
var someContainerAdapter = new BuiltinContainerAdapter();
for the built-in container adapter, or
var someContainerAdapter = new AdapterForMyFavoriteIocContainer(myFavoriteIocContainer);
to integrate with your favorite IoC container, and then
Configure.With(someContainerAdapter) .Logging(l => l.Log4Net()) .Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig()) .MessageOwnership(d => d.FromRebusConfigurationSection()) .CreateBus() .Start(); // have IBus injected in application services for the duration of the application lifetime // let the container dispose the bus when your application exits myFavoriteIocContainer.Dispose();
which will stuff the resulting
IBus in the container as a singleton and use the container to look up message handlers. Check out the Configuration section on the official Rebus documentation wiki for more information on how to do this.