RabbitMQ是实现了高级消息队列协议(AMQP)的消息中间件,使用Erlang语言开发。RabbitMQ作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。
在RabbitMQ中,生产者(Producer)发布消息到交换机(Exchange),交换机根据路由规则将收到的消息分发到与该交换机绑定的队列(Queue),然后消费者根据不同的策略对队列中的信息进行处理。
图-1 RabbitMQ架构
生产者(Producer、Publisher):消息的生产者。
消费者(Consumer):消息的消费者。
队列(Queue):用于存储还未被消费者消费的消息。
虚拟主机(Virtual Host):一个Virtual Host里面有若干个Exchange和Queue,类似于资源组的概念。
交换机(Exchange):接受发布者发送的消息,并根据Binding规则将消息路由到服务器中的队列。
连接(Connection):连接指的是TCP连接,发布者与消费者都是通过TCP连接与RabbitMQ建立连接。
通道(Channel):客户端与服务器之间通过通道建立连接。由于TCP建立连接和释放连接的资源开销较大,每一个线程都建立一个TCP连接非常浪费,通过通道共享Connection。
集群模式:分为单节点和集群两种。
单节点:RabbitMQ只有一个实例,单独运行。
集群:多个RabbitMQ组成集群,可以使用RabbitMQ的集群特性。
集群健康状态:分为健康和不健康两种。
健康:集群中组件运行正常时,对应集群将处于健康状态。
不健康:集群中组件运行状态异常时,对应集群将处于不健康状态。
消息中间件RabbitMQ适用于以下场景:
应用解耦:消息中间件RabbitMQ可以插入应用中间,为两边应用提供接口,实现应用通过消息中间件进行通信。
异步处理:消息中间件RabbitMQ提供异步处理机制,允许应用把一些消息放入消息中间件中,并不立即处理它,在之后需要的时候再处理。