RabbitMQ offers a variety of features to let you trade off performance with reliability, including persistence, delivery acknowledgements, publisher confirms, and high availability.
Messages are routed through exchanges before arriving at queues. RabbitMQ features several built-in exchange types for typical routing logic. For more complex routing you can bind exchanges together or even write your own exchange type as a plugin.
Several RabbitMQ servers on a local network can be clustered together, forming a single logical broker.
For servers that need to be more loosely and unreliably connected than clustering allows, RabbitMQ offers a federation model.
Queues can be mirrored across several machines in a cluster, ensuring that even in the event of hardware failure your messages are safe.
RabbitMQ supports messaging over a variety of messaging protocols.
There are RabbitMQ clients for almost any language you can think of.
RabbitMQ ships with an easy-to use management UI that allows you to monitor and control every aspect of your message broker.
If your messaging system is misbehaving, RabbitMQ offers tracing support to let you find out what's going on.
RabbitMQ ships with a variety of plugins extending it in different ways, and you can also write your own.