Add support for rabbitmq cluster failover
Add support for rabbitmq cluster failover

- Declare queue with HA mirroring, this way rabbitmq will **do it's best** to not lose
messages by replicating them to all nodes in the cluster.
- Redeclare queues when failing over to a new node in the cluster, this will
make sure that queue and binding survive node crash.
- Add retry logic when publishing an events, this is only retry in the connection
level.
- Don't declare queues as durable, since:
   1. It doesn't mean what most things it's means.
   2. When a queue is durable, failover fail of queues.
- Don't block when getting a connection from the pool, blocking is bad at best blocking
should be used with timeout, even better fail fast.

mamachanko/lymph,mamachanko/lymph,mamachanko/lymph,deliveryhero/lymph,kstrempel/lymph,itakouna/lymph,torte/lymph,lyudmildrx/lymph,dushyant88/lymph,lyudmildrx/lymph,lyudmildrx/lymph,itakouna/lymph,vpikulik/lymph,itakouna/lymph,Drahflow/lymph