RabbitMQ(三)RabbitMQ的介绍和RabbitMQ的五种模式

1. RabbitMQ的介绍

2. RabbitMQ的结构以及每个组件的作用

结构图

2.1 结构介绍

2.1.1 Product【生产者】

product:用户生产发送消息,为消费者传送消息

2.1.2 Connection【连接】

Connection:publisher(信息发送者)/consumer(信息接受者) 和 broker(接收和分发的应用) 之间的 TCP 连接

2.1.3 channel【信道】

  Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销

2.1.4 Broker【接收分发应用】

Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker

2.1.5 Virtual Host【 分组AMQP 的基本组件】

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等

2.1.6 Exchange【交换机】

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)

2.1.7 Queue【队列】

Queue:消息最终被送到这里等待 consumer 取走。消息只能被存储在队列里。 队列存储空间只受服务器内存和磁盘限制,它本质上是一个大的消息缓冲区。多个生产者可以向同一个队列发送消息,多个消费者也可以从同一个队列接收消息.

2.1.8 Binding【连接exchange 和 queue】

Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

3. RabbitMQ的模式

3.1 简单模式

从图上可以看到只有三个角色: p 【product】: 生产者 发生消息的 红色[queue]: 队列。存储消息的 C [consumer]: 消费者 消费消息
特点:    1. 一个生产者    2. 由多个消费。    3. 统一个队列。    4. 这些消费者之间存在竞争关系。 用处:    比如批量处理上. rabbitMQ里面积压了大量的消息。
  工作队列(即任务队列)背后的主要思想是避免立即执行资源密集型任务,并且必须等待它完成。相反,我们将任务安排在稍后完成。   我们将任务封装为消息并将其发送到队列。后台运行的工作进程将获取任务并最终执行任务。当运行多个消费者时,任务将在它们之间分发。   使用任务队列的一个优点是能够轻松地并行工作。如果我们正在积压工作任务,我们可以添加更多工作进程,这样就可以轻松扩展。

3.3 发布订阅模式

向多个消费者传递同一条消息。这种模式称为“发布/订阅”

3.4 路由模式

路由模式是通过发送信息是的 key 与 路由向队列绑定时设定的 key 值进行比较,key 相同则将消息存入对应的队列中,否则队列不存储该消息

3.5 topic主体模式

绑定按照通配符的模式。    *: 统配一个单词。    #: 统配n个单词
主体模式与路由模式相似,但对比的 key 使用通配符进行判断

RabbitMQ(五)RabbitMQ的五种模式的代码实现: 其他有关RabbitMQ的知识:

经验分享 程序员 微信小程序 职场和发展