Recently, I published a new project on codeplex called RockBus. It’s a .NET based publish/subscribe and/or content based routing framework that allows for the following functionalities:
* Full support for WCF and it’s protocols, extensibility, etc.
* Durable message delivery using MSMQ and/or SQL Server Service Broker (message persistence in a database is on the todo-list)
* Static subscription configuration via database or web/app configuration files.
* Dynamic (@run-time) subscription configuration via a WCF service interface.
* Transactional delivery to one or multiple subscribers.
Support for itineraries (complex message flows)
The full list of goodies is documented on the codeplex page: rockbus.codeplex.com.
RockBus can be interesting if you’re looking for a way to decouple your wcf clients and services. For instance, by using publish/subscribe, you can have multiple subscribers (wcf services) receive the same message, while the publisher (wcf client) only has to send the message once, and doesn’t have to know which subscribers actually receive the message(s).
If you want to selectively send messages to subscribers, you can use XPath expressions to filter out the messages. The XPath expressions are part of the subscription information, sent to RockBus by the subscribers.
There are a couple of samples, provided with the RockBus solution:
* 0. No Dependencies: Shows how RockBus can be used to perform in-memory (non-store-and-forward) routing of messages to subscribers. This sample has no dependencies on for instance MSMQ or SSB.
* 1. Durable Cbr: Shows how RockBus can be used to perform content-based routing, while storing the messages in a durable backing store (MSMQ) before delivering them to the subscribers.
* 2. Transactional Delivery: Shows how RockBus can be configured to transactionally deliver one message to two subscribers (one message copy to each subscriber), within 1 transaction. If one subscriber’s transaction rolls back, the other subscriber’s transaction will, too. The transactions are propagated using wcf WsHttp and NetNamedPipe bindings.
* 3. Dynamic Publish/Subscribe: Shows how RockBus can be used to receive subscription information at run-time, store that subscription information into a subscription database, and perform content-based routing on any published messages using that subscription information.
* 4. File Transport: Shows how the RockBus framework can be extended with custom implementation of a transport by implementing the ITransport and IMessagePublisher interfaces. (The File transport is (to be) used for demonstration purposes only).