Hello,
i'm here to ask for advice on NServiceBus over RabbitMQ...
Our as-is scenario is (a bit simplified) something like this:
EndpointA is a publisher and EndpointB is a subscriber, connected over internet to a RabbitMQ central broker. So, in detail:
- EndpointA (located in geographical site A) connected over internet to a single central broker (No RabbitMq cluster, no federation, no shovel)
- EndpointB (located in geographical site B) connected over internet to the same single broker
Everything works fine as far as there are no "network problems" (and since we are over internet, full network reliability cannot be guaranteed): when endpoints can't communicate with broker, they start raising exceptions, and if broker doesn't come on line again in a "reasonable" time (1.30/2 mins) they raise a fatal exception and shut down.
Looking at RabbitMQ documentation, it seems that you can avoid this kind of issues with a federation/shovel scenario:
- EndpointA (located in geographical site A) connected over a reliable network (LAN) to brokerA (let's stay simple: located in same geographical site A)
- EndpointB (located in geographical site B) connected over a reliable network (LAN) to brokerB ( located in same geographical site B)
- brokerA and brokerB are connected over internet in a federation/shovel configuration
So my questions are:
1) Can NServiceBus out-of-the-box handle a federation/shovel scenario like the one described above? I mean, in my simple (one single central broker) scenario, no additional configuration is needed at RabbitMQ administration level; if both endpoints have the same transport connection string, everything is configured by NServiceBus installers when you install the endpoints: queues, exchanges etc. You configure NServiceBus and then NServiceBus configures the transport layer. Is the same in a federation/shovel scenario? EndpointA has a transport connection string pointing to brokerA, EndpointB has a transport connection string pointing to brokerB, and when installers run, NServiceBus creates federated queues and exchanges. Is this right? I can't find any specific documentation about that...
2) While we are setting up this new scenario, is there a way to handle issues related to an unreliable network? I asked in a previous post (https://groups.google.com/forum/#!topic/particularsoftware/bDxi5-JL4MM), if you can configure the endpoint behavior when broker becomes unavailable, but it seems there is no way to do that...So are there any alternatives? Federation/Shovel is the right path, but in the meantime?
Thank you!