@Trevor Boyd Smith, probably option 2 or 3 as shown below are something you could consider.
Option 1: Bidirectional federated exchange
A message will end up in the both broker A and B, one copy each broker, independent of each other. In other words, e.g., even after broker B has delivered the message to its consumer, the other copy of the message still remains in broker A.
Advantage: You will always have two copies of the message, one in each broker, which is highly available.
Disadvantage: You need to have a consumer connected to each broker.
Option 2: Bidirectional federated queue
A message will end up in one of the two brokers. By default, the broker where the message has been published will have the priority to enqueue the message; however if only the other broker has got a consumer, the message will move to the other broker.
It does not matter which broker the message ends up in, the message will be delivered once and once only by a consumer connected to either of the brokers.
Advantage: The message will be delivered once and once only to a consumer connected to either of the brokers.
Disadvantage: There will be only one copy of the message. If the broker that has got the message goes down, the other broker can not get the message. But if you are fine with eventual consistency, this option is OK. The reason is when the problematic broker comes back up running, the message would be available, eventually.
Option 3: Bidirectional federated exchange and queue
In this case, a message will end up in both brokers, one copy each broker. The same message will be delivered to a consumer connected to either of the brokers, twice! Once the message has been delivered twice, it will be gone in both brokers. (If there are two consumers, one connected to each broker, each broker will deliver the same message to its consumer once.)

Advantage: The consumer can connect to either of the brokers, and the message in each broker will be delivered and dequeued.
Disadvantage: The same message will be delivered twice. The workaround would be, before handling the message, check if the same message has already handled.
Note:
It does not mean which option is better than the other one or ones. It all depends on your use case, and there are many other configurations that can come into play, which could change the behaviour.