Transitioning from Msmq to RabbitMq with NServiceBus.Router

@SzymonPobiega We are currently using Msmq and are transitioning to RabbitMq. We have a lot of services and there are various applications/processes that send commands to our services and/or subscribe to events published by our services. While my team owns the services, the applications/processes that consume our services are owned by other teams. I would like to implement a strategy that lets us update our service transport without affecting the consuming applications (so that they can transition at their own pace). We are currently using centralized FileBasedRouting to manage our message routing. I was considering to use NServiceBus.Router to bridge the transports. However, it looks like the sender needs to be aware of the router. Is there a way to implement the router/bridge that is agnostic to the sending application/process?

An alternate approach that I am considering is to have an intermediate/proxy service that forwards the messages to the router. So only the intermediate/proxy service will be aware of the router. We would configure the centralized message routing file to route all messages to the proxy service and the proxy service will in turn forward those messages to the actual destination endpoints through the router. I would appreciate your feedback about this approach or alternate suggestions.

@adeepak12 yeah, the Router is designed in such a way that the receiver or publisher can be unaware of the Router while the sender/subscriber needs to be. To be precise that is the design choice behind Router.Connector which is the default way of connecting to the router.

What you describe sounds more like a case for Router.Migrator package which is designed to allow endpoint-by-endpoint transition from one transport to another.

The Migrator runs a router side-by-side with the endpoint and that router is attached to the old endpoint’s queue so that all non-migrated endpoints can continue to send messages to that queue.

Here you can find a more detailed description of how the Migrator works. There is also a Migrator sample in the Router repo that I am going to move to NSB doco page later.

That’s awesome! Thank you for sharing this.