1、RabbitMQ的四大核心概念:
1.1.生产者
:
- 产生数据,发送消息的程序是生产者
1.2.交换机
:
- 交换机
一边接受来自生产者的消息,一边将消息推送到队列中
; 交换机必须准确知道如何处理接受到的消息
,到底是把消息推送到特定队列还是推送到多个队列或者还是把消息丢弃。这个是由交换机类型决定
。
1.3.队列
:
- 对列的
本质是一个消息缓冲区
- 队列仅仅受主机内存与磁盘的约束;
- 许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据
1.4.消费者
:
- 消费与接收具有相似的含义。
- 消费者大多时候是一个等待接收消息的程序;
- 注意
生产者,消费者和消息中间件很多时候并不在同一机器上
; - 同一个应用程序既可以是生产者又是可以是消费者。
2、RabbitMQ中各个名词解释:
2.1.Broker
:
- 接收和分发消息的应用,
RabbitMQ Server
就是 Message Broker
2.2. Virtual host
:
- 出于多租户和安全因素设计的,所谓的多租户就是:
一个Broker中可以含有多个Virtual host
,一个Virtual host中就又含有多个交换机和信道channel。 - 当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等
2.3.Connection
:
- publisher/consumer 和 broker 之间的
TCP 连接
2.4.Channel
:
- 1.如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP
Connection
的开销将是巨大的,效率也较低。 - 2.Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。
- 3.
Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销
2.5.Exchange
:
- message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:
direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
2.6.Queue
:
- 消息最终被送到这里等待 consumer 取走
2.7.Binding
:
- exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据
3、RabbitMQ核心部分(6大模式):
- 1.简单模式:
- 2.工作模式:
- 3.发布订阅模式:
- 4.路由模式:
- 5.主题模式:
- 6.发布确认模式: