So, the thing about this, is that it really should happen at the RabbitMqHost level in the code. What I've thought about this is that being able to rotate a host configuration (actually configurations, since there would be multiple hosts) and if a host becomes unavailable, reconnect to the next host in the list. This way, it would happen under the covers and be just part of how the host configuration works.
With a mix of strategies, such as first available, round robin, etc. to allow connections to be shared across nodes.
The thing is, there would need to be a virtual host name "my-cluster", so that the message addresses would know which host to use, and then the host would have multiple node names ("my-node1", "my-node2", etc.).
I'm not sure I've spelled this out well, but I'd really like this to be built into MT at the RabbitMqHost level, so that when a connection is attempted, the underlying host name is masked by a logical host name, that the host maps to physical machines.
Like:
x.LogicalHost("my-cluster", h =>
{
h.Node("my-node1");
h.Node("my-node2");
});
Then, the URI would be:
rabbitmq://my-cluster/my-queue
And it would map underlying to the connection for that logical host.
Thoughts?
I'd be happy to help on a branch if you're already getting started.