Rabbit MQ is a message broker that allows for asynchronous messaging between applications and services. It uses exchanges, queues, bindings, and routing keys to deliver messages from producers to consumers. There are different types of exchanges like direct, topic, and fanout that determine how messages are routed from producers to queues. Rabbit MQ supports multiple protocols and client libraries for different programming languages. It provides reliable messaging with acknowledgements, flexible routing, clustering for high availability, and tracing capabilities.