【RabbitMQ】模型架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Francis123580/article/details/82560285

MQ 作用

  1. 解耦:通过基于数据的接口层,让不同的模块各自扩展修改,实现解耦
  2. 冗余:MQ 可以把数据进行持久化直到它们被完全处理,规避了数据丢失的风险
  3. 扩展性:通过解耦可以方便增加应用的处理过程,从而提高消息入队和处理的效率,实现扩展
  4. 削峰:MQ可以支撑关键组件支撑突发访问压力,缓冲上下游流量差,实现削峰
  5. 可恢复性:部分组件失效时,加入消息队列的消息仍然可以在系统恢复后处理
  6. 顺序保证:MQ支持一定的顺序性
  7. 缓冲:MQ 通过一个缓冲层来帮助任务高效执行
  8. 异步通信:把不需要立即处理的消息通过MQ进行异步处理

相关概念

这里写图片描述

Producer:生产者创建消息,发布到RabbitMQ中,消息包含 消息体 和 标签(交换器名称+路由键)

Consumer:消费者连接到RabbitMQ服务器,并订阅到队列上,消费者会消费消息的消息体

Broker:服务节点,大多数情况可以把一个RabbitMQ Broker看作一台RabbitMQ服务器

Queue:队列,RabbitMQ的内部对象,用于存储信息。多个消费可以订阅同一个队列,但消息会被平均分摊,而不是每个消费者都会受到所有的消息


Exchange:交换器,生产者将消息发送到交换器,交换器将消息路由到一个或者多个队列中

RoutingKey:路由键,生产者将消息发给交换器的时候会指定一个路由键,用来指定路由规则

Binding:绑定,RabbitMQ通过绑定将交换器与队列关联起来,绑定时会指定BindingKey

Connection:连接,生产者或消费者和Broker之间的一条TCP连接

Channel:信道,建立在Connection上的虚拟连接,每条AMQP指令都通过信道完成


交换器类型

  • fanout:把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中

  • direct:把消息路由到BindingKey和RoutingKey完全匹配的队列中

  • topic:把消息路由到BindingKey和RoutingKey相匹配的队列中

  • headers:根据发送消息内容中的headers进行匹配,性能比较差

运转流程

生产者发送消息

  1. 生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)
  2. 生产者声明一个交换器,并设置相关属性(交换机类型、持久化)
  3. 生产者声明一个队列,并设置相关属性(排他、持久化、自动删除)
  4. 生产者通过路由键将交换器和队列绑定起来
  5. 生产者发消息至RabbitMQ Broker(包含路由键、交换器信息)
  6. 相应的交换器根据接收到的路由键查找相匹配的队列
  7. 若找到队列,则把消息存入;若没有,则丢弃或者回退给生产者
  8. 关闭信道
  9. 关闭连接

消费者接收消息

  1. 消费者连接到 RabbitMQ Broker ,建立一个连接(Connection),开启一个信道(Channel)
  2. 消费者向 RabbitMQ Broker 请求消费对应队列中的消息
  3. 等待 RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息
  4. 消费者确认(ack)接收到的消息
  5. RabbitMQ 从队列中删除相应已经被确认的消息
  6. 关闭信道
  7. 关闭连接

 
 

猜你喜欢

转载自blog.csdn.net/Francis123580/article/details/82560285
今日推荐