rebus-org/Rebus — pull request #233 by pruiz (2014-04-28 04:59:29+00:00)
Title: Added an additional rabbit routing strategy: one exchange per message type

In this routing scheme, each message type gets it's own exchange name, and endpoints subscribe to message's by means of binding it's input queue to the exchanges corresponding to any of the message type's insterested on.

Additionally, instead of directly binding it's input queue to message's exchanges, and endpoint may declare an 'input exchange' which will be used as 'Input Address', by (fanout) binding it's input queue to this input exchange, and then bind the input exchange to any desired message's exchanges. This allows for additional topologies as having multiple consumers receiving messages on their own queue, but being exposed as a single 'input address'. And also allows having an endpoint receive duplicate copies of all messages received by other endpoint (ie. for the purpose of having an 'audit' endpoint, for example).

This is somewhat based on Dru Sellers RabbitMQ conventions (see last part of: http://codebetter.com/drusellers/2011/05/08/brain-dump-conventional-routing-in-rabbitmq/), and (I hope this) will also server in the future as the basis for inheritable/polymorphic message routing with rebus+rabbitmq.