rabbitmq 整体上是一个生产者,消费者模型,主要用于接收,存储,转发消息;可以把次过程简单理解为 商家(producer)将货物(message)给 物流公司 (broker),物流公司再将货物快递给你(consumer)一个过程;
Queue 队列 是 RabbitMq 的 内部对象,用于储存消息; 生产者可以将消息 进行发布,然后会储存至队列, 消费者可以订阅队列,进行消息的消费;多个消费者订阅一个队列时,消息队列中的消息会被轮询给多个消费者;
交换器(Exchange),用来接收生产者发送的消息并将这些消息路由给服务器中的队列;注意 生产者将消息发给交换器时会附带一个路由键(routing key);
绑定(Binding),用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表
RabbitMq 中 的 消息交换器有四种类型,分别是 fanout, direct , topic , headers ;
fanout
: fanout 类型交换器会将所有消息都路由到交换器绑定的队列中;direct
:消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中;topic
: topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上;比如 . 用于分隔单词,# 用于模糊匹配一个单词, * 用于匹配多个单词;headers
: headers类型转换器 不使用路由规则路由消息,而是使用 消息内容中的headers属性进行匹配, 性能较差,使用不广泛;信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接
虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 /