RabbitMQ is an open source message broker software written in Erlang. It uses exchanges to route messages from producers to queues based on routing keys or bindings. There are four main exchange types - direct, fanout, topic, and headers. The direct exchange routes messages to queues based on an exact match between the routing key and binding key.