在程序开发中,有很多地方都需要用到消息队列,rabbitmq是其中的一种消息队列。rtmq有exchange,路由,队列组成。当生产者产生了一个消息之后,会进到exchange,然后根据路由绑定特定的队列,由消费者从队列中取消息进行消费。

exchange的几种类型

  1. 扇形
  2. default 默认类型
  3. 直连
  4. topic 基于路由,* 匹配一个,#匹配多个
  5. 路由交换机,跟topic类似,根据路由键绑定特定队列
  6. 头交换机,根据消息的header数据

rabbitmq的几种工作模式

  1. 一对一 ,简单模式,基于默认交换机
  2. 一对多,但是只有一个消费者可以消费,工作模式,也是基于默认交换机
  3. 发布订阅 一个消息被多个消费者消费,重复消费,适用场景,群发消息
  4. 路由模式,特定的交换机绑定特定的队列消费
  5. 主题模式,基于topic交换机,*匹配一个,#匹配多个

rabbitmq的适用场景

  1. 并发,有并发需求的时候,先让并发请求进入消息队列,然后由程序从消息队列一个一个消费处理
  2. 异步,像发短信通知,这个就可以直接丢到消息队列,不用管这个结果,把同步的事情,变成异步,减少等待
  3. 减少数据库的压力,如果大量请求,需要访问数据库,可能会对数据库造成压力,放到消息队列之后,可以有程序根据数据的承载情况,分批从消息队列中取消息处理,减轻数据库压力
  4. 解耦,比如ABC三个系统,B,C两个系统都依赖于A系统,这时候,如果有D系统也需要依赖于A系统,那么就需要修改A系统的代码,这样在生产中,对A系统就不友好,如果用消息队列,就可以让BCD直接依赖于消息队列,而不具体依赖于A系统,就不用修改A系统的代码。减少依赖,有点类似于IOC,不依赖于具体实现,只依赖抽象接口。