I'm having some trouble getting the right architecture configured to support rabbitmq federation in a clustered high availability environment. &nbsp;Our basic setup is four clusters of two nodes each which are separated by a WAN. &nbsp;<div><br></div><div>"home" is the "home" cluster and "remote1", "remote2" and "remote3" are remote clusters. &nbsp;There are a lot of queues being created and published to via the API identically on all clusters but I only want to federate ONE of the queues, which is called "EventListener" back to the "home" cluster from all the "remote" clusters. &nbsp;I want messages published to this queue on each remote cluster to be federated to the home cluster to be consumed by a separate event listener service that only lives at the "home" site.<div><div><br></div><div>Each cluster is configured with:</div><div><br></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div># run on node 1</div></div><div><div>rabbitmqctl stop_app</div></div><div><div>rabbitmqctl reset</div></div><div><div>rabbitmqctl join_cluster rabbit@node2</div></div><div><div>rabbitmqctl start_app</div></div></blockquote><div><div><br></div><div>We have configured three hardware load balancer VIPs that load balance connections on port 5672 between both nodes in each cluster, and have configured federation upstreams to use these and also configured our application to use these VIPs for queue/exchange creation and for publishing messages. &nbsp;Here's our federation config script thats run on node1 of the home cluster only:</div><div><br></div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # run on home cluster node1</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>rabbitmq-plugins enable rabbitmq_federation</div></div><div><div>rabbitmq-plugins enable rabbitmq_federation_management</div></div><div><div>rabbitmq-plugins enable rabbitmq_management</div></div><div><div>service rabbitmq-server restart</div></div><div><div>rabbitmqctl set_parameter federation-upstream remote1-upstream '{"uri":"amqp://remote1-vip","expires":3600000}'</div></div><div><div>rabbitmqctl set_parameter federation-upstream remote2-upstream '{"uri":"amqp://remote2-vip","expires":3600000}'</div></div><div><div>rabbitmqctl set_parameter federation-upstream remote3-upstream '{"uri":"amqp://remote-3-vip","expires":3600000}'</div></div><div><div>rabbitmqctl set_policy federate-EventListener "^EventListener$" '{"federation-upstream-set":"all"}' 0</div></div><div><div>rabbitmqctl list_exchanges name policy | grep federate</div></div><div><div>rabbitmqctl eval 'rabbit_federation_status:status().'</div></div></blockquote><div><br></div><div>However I am noticing that the "rabbitmqctl eval 'rabbit_federation_status:status()." command only shows federation config on node2 of the home cluster despite having been configured on node1:</div><div><br></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>[root@node1 ~]# rabbitmqctl eval 'rabbit_federation_status:status().'</div></div><div><div>[]</div></div><div><div>...done.</div></div><div><br></div><div><div>[root@node2 ~]# rabbitmqctl eval 'rabbit_federation_status:status().'</div></div><div><div>[[{exchange,&lt;&lt;"EventListener"&gt;&gt;},</div></div><div><div>&nbsp; {vhost,&lt;&lt;"/"&gt;&gt;},</div></div><div><div>&nbsp; {connection,&lt;&lt;"remote3-upstream"&gt;&gt;},</div></div><div><div>&nbsp; {upstream_exchange,&lt;&lt;"EventListener"&gt;&gt;},</div></div><div><div>&nbsp; {status,normal},</div></div><div><div>&nbsp; {timestamp,{{2013,7,31},{11,16,19}}}],</div></div><div><div>&nbsp;[{exchange,&lt;&lt;"EventListener"&gt;&gt;},</div></div><div><div>&nbsp; {vhost,&lt;&lt;"/"&gt;&gt;},</div></div><div><div>&nbsp; {connection,&lt;&lt;"remote2-upstream"&gt;&gt;},</div></div><div><div>&nbsp; {upstream_exchange,&lt;&lt;"EventListener"&gt;&gt;},</div></div><div><div>&nbsp; {status,normal},</div></div><div><div>&nbsp; {timestamp,{{2013,7,31},{11,16,19}}}],</div></div><div><div>&nbsp;[{exchange,&lt;&lt;"EventListener"&gt;&gt;},</div></div><div><div>&nbsp; {vhost,&lt;&lt;"/"&gt;&gt;},</div></div><div><div>&nbsp; {connection,&lt;&lt;"remote1-upstream"&gt;&gt;},</div></div><div><div>&nbsp; {upstream_exchange,&lt;&lt;"EventListener"&gt;&gt;},</div></div><div><div>&nbsp; {status,normal},</div></div><div><div>&nbsp; {timestamp,{{2013,7,31},{11,16,19}}}]]</div></div><div><div>...done.</div></div></blockquote><div><br></div><div>And I'm noticing that messages published to the queues via the load balancer VIPs to the remote clusters are not showing up in the "EventListener" queue of the home cluster.</div><div><br></div><div>Is this not the right way to set this up? &nbsp;Is it possible to configure this without using an external load balancer and still achieve high availability? &nbsp;If I federate to a single node of a cluster directly, what happens if that node goes down? &nbsp;Do I have to configure redundant federation between every node of home cluster to every node of each remote cluster? If I don't use a load balancer VIP to publish to from my application, if the single node of the cluster I've configured goes down, it wont help me that the other node is still available.</div><div><br></div><div>Whats the best practice, if anything, on this kind of config?</div><div><br></div><div><br></div></div>