Hello,
I have encountered an interesting situation with Durable Queues in a clustered test environment that has no mirroring.
My test environment:
* Durable queues
* No Mirroring of queues
* Messages are not persisted by default
* Two node cluster
When I begin, the two node cluster is up and functioning normally.
I then start some consumers, with some connecting to one node and some to the second node. This establishes queues for the
consumers on the node they are connected to.
I then shutdown one of the cluster nodes.
My consumers that were connected to the shutdown node reconnect to the remaining node due to failover logic in our applications. Part of the reconnection logic
built into the application is to passively try to create the queue it will consume, with the queue name being the same over time, meaning it will passively try to recreate the queue it has created on the originally connected node.
I now have all consumers connected to the remaining node and the consumers with queues mastered on the down node do not receive any messages.
I believe the consumers cannot recreate their Queues because they were originally created as durable and the queues still exist in the database.
So, while the second node is down, consumers trying to consume from the Queues that reside on the down node cannot receive messages until the
node comes back online. And published messages cannot be routed to the queue because it is down.
We've also been doing performance testing with your Java perfTool, and see a big hit in message throughput and latency with mirrored queues, so we are leaning toward no mirroring because
the environment we are testing for has a higher priority on performance that high availability of the individual messages.
So, my questions are:
* Is there a way to make the queues be available during the node down time without using mirroring and without changing the application to no longer use durable queues?
* If I do not use Durable Queues, will the queue be properly removed from the database when one node goes down (either by shutdown or by crashing) and therefore be allow for our reconnection logic to recreate the queue on the remaining node?
* Finally, do you have any references or suggestions to make mirrored queues be more performant? We implemented mirroring with a policy "ha-mode: exactly, ha-params: 2".
Thank you,
Steve