消息中间件RabbitMQ学习笔记—RabbitMQ的工作流程
1. RabbitMQ工作流程详解—生产者发送消息的流程
- 生产者连接RabbitMQ,建立TCP连接( Connection),获取信道(Channel) ,生产者拿到信道(Channel)
- 生产者通过信道(Channel)声明一个Exchange(交换器,exchangeDeclare这个命令气的作用是在指定的虚拟主机内部是否有这样的一个交换器,如果有直接使用,没有就创建一个),并设置交换器的相关属性,比如交换器类型、是否持久化等
- 生产者还会声明出一个消息队列(queueDeclare),同时还要声明一个消息队列的名称,声明的时候会先到虚拟主机中去看一下,如果有这个消息队列就直接使用,没有就创建一个
- 之后要将详细队列和对应的交换器绑定起来,他的绑定key是什么
- 绑定之后就通过channel向外面发送消息了,发送消息就要指定向哪个交换器发送消息,我的路由key是什么,我的消息是什么样的一个属性,以字节数组的一个形式发送过去
- 发送完之后channel就可以关掉
2. RabbitMQ工作流程详解—生产者发送消息的完整过程总结
- 生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel)
- 生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等
- 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等
- 生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来
- 生产者发送消息至RabbitMQ Broker,其中包含 routingKey (路由键)、交换器等信息
- 相应的交换器根据接收到的 routingKey 查找相匹配的队列。
- 如果找到,则将从生产者发送过来的消息存入相应的队列中。
- 如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
- 关闭信道。
- 关闭连接。
3. RabbitMQ工作流程详解—消费者接收消息的流程
- 消费者连接到RabbitMQ Broker ,建立一个连接(Connection ) ,开启一个信道(Channel) 。
- 消费者向RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数, 以及做一些准备工作
- 等待RabbitMQ Broker 回应并投递相应队列中的消息, 消费者接收消息(接收消息有两种一种是从消息队列中主动去拿,第二种是写一个回调函数去订阅消息队列里面的信息)。
- 消费者确认( ack) 接收到的消息。
- RabbitMQ 从队列中删除相应己经被确认的消息。
- 关闭信道。
- 关闭连接。
4.RabbitMQ图解
- Hello World一对一的简单模式。生产者直接发送消息给RabbitMQ,另一端消费。未定义和指定Exchange的情况下,使用的是AMQP default这个内置的Exchange。