ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 相关概念 整体架构模型: ![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1534487964395&di=a2a4f7d0fbc2c9c2efed702525fc6af8&imgtype=0&src=http%3A%2F%2Fimage.bubuko.com%2Finfo%2F201808%2F20180809114803031180.jpg) ### 生产者发送流程 1. 生产者连接到 RabbitMQ Broker,建立一个 Connection,开启一个 Channel(信道) 2. 生产者声明一个 Exchange 并设置相关属性 3. 生产者声明一个 Queue 并设置相关属性 4. 生产者通过路由键将 Exchange 和 Queue 绑定起来 5. 生产者发送消息至 RabbitMQ Broker,包含路由键、Exchange 等信息 6. 相应的 Exchange 根据接收的路由键查找匹配队列 7. 如果找到,则将从生产者发送过来的消息存入相应队列中 8. 如果没找到,根据生产者配置的属性选择丢弃还是回退给生产者 9. 关闭 Channel 10. 关闭连接 ### 消费者接收流程 1. 消费者连接到 RabbitMQ Broker,建立一个 Connection,开启一个 Channel(信道) 2. 消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数以及做一些准备工作 3. 等待 RbbitMQ Broker 回应并投递相应对呀中的消息,消费者接收消息 4. 消费者确认(ack)接收到的消息 5. RabbitMQ 从队列中删除相应已确认的消息 6. 关闭信道 7. 关闭连接 ### 交换器 #### 类型 - fanout(扇形):将所有发送到该交换器的消息路由到所有 与该交换器绑定的队列中,无差别广播 - direct(直连):BindingKey 和 RoutingKey 完全匹配的队列 - topic(主题):RoutingKey 和 BindingKey 都用 `.` 分隔字符串(被`.`分隔开的每一段独立字符串称为一个单词),BingdingKey 中存在两种特殊字符串 `*` 和 `#`。`*`匹配一个单词,`#`用于匹配多规格单词(也可以是零个) - headers:根据消息内容中的 `headers` 属性进行匹配。性能很差,也不实用,基本上看不见它的存在