Clustering is a large area and often means different things to different people. We'll try to list the various aspects of clustering and how they relate to ActiveMQ

Queue consumer clusters

We support reliable high performance load balancing of messages on a queue across consumers. If a consumer dies, any unacknowledged messages are redelivered to other consumers on the queue. If one consumer is faster than the others it gets more messages etc. If any consumer slows down, other consumers pick up the slack. So you can have a reliable load balanced cluster of consumers on a queue processing messages.

Using queues in this way, possibly across a network of brokers (see below) provides a good grid style processing model, allowing a cluster of worker processes to asynchronously process messages placed on a queue in a scalable and efficient SEDA style manner. Many folks often want a grid solution to allow server farms to process various tasks like complex calculations and so forth - mostly an ActiveMQ network of brokers and clients with failover:// transport will do the trick.

Broker clusters

The most common mental model of clustering in a JMS context is that there is a collection of JMS brokers and a JMS client will connect to one of them; then if the JMS broker goes down, it will auto-reconnect to another broker.

We implement this using the failover:// protocol in the JMS client. See the Failover Transport Reference page for details of how to configure the failover protocol. Note: The reliable:// protocol in ActiveMQ 3.x has now been changed to the failover:// protocol

If we just run multiple brokers on a network and tell the clients about them using either static discovery or dynamic discovery then clients can easily failover from one broker to another. However stand alone brokers don't know about consumers on other brokers; so if there are no consumers on a certain broker messages could just pile up without being consumed. We have an outstanding feature request to tackle this on the client side - but currently the solution to this problem is to create a Network of brokers to store and forward messages between brokers.

Discovery of brokers

We support auto-discovery of brokers using static discovery or dynamic discoveryso clients can automatically detect and connect to a broker out of a logical group of brokers as well for brokers to discover and connect to other brokers to form large networks.

Networks of brokers

If you are using client/server or hub/spoke style topology and you have many clients and many brokers; there is a chance that one broker has producers but no consumers so that messages pile up without being processed. To avoid this ActiveMQ supports a Networks of Brokers which provides store and forward to move messages from brokers with producers to brokers with consumers which allows us to support distributed queues and topics across a network of brokers.

This allows a client to connect to any broker - and fail over to another broker if there is a failure - providing from the clients perspective a cluster of brokers.

Networks of brokers also allows us to scale up to massive number of clients in a network as we can run as many brokers as we need.

You can think of this as a cluster of clients connecting with a cluster of brokers with auto-failover and discovery making a simple and easy to use messaging fabric.

Master Slave

The problem with running lots of stand alone brokers or brokers in a network is that messages are owned by a single physical broker at any point in time. If that broker goes down, you have to wait for it to be restarted before the message can be delivered. (If you are using non-persistent messaging and a broker goes down you generally lose your message).

The idea behind MasterSlave is that messages are replicated to a slave broker so that even if you have catastrophic hardware failure of the master's machine, file system or data centre, you get immediate failover to the slave with no message loss.

Replicated Message Stores

An alternative to MasterSlave is to have some way to replicate the message store; so for the disk files to be shared in some way. For example using a SAN or shared network drive you can share the files of a broker so that if it fails another broker can take over straight away.

So by supporting a Replicated Message Store you can reduce the risk of message loss to provide either a HA backup or a full DR solution capable of surviving data centre failure.

© 2004-2011 The Apache Software Foundation.
Apache ActiveMQ, ActiveMQ, Apache, the Apache feather logo, and the Apache ActiveMQ project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
Graphic Design By Hiram