RabbitMQ 介绍

RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。

RabbitMQ主要用途

  • 异步处理
  • 应用解耦
  • 流量消峰

RabbitMQ系统架构

主要组件介绍

  • 生产者(Producer):主要负责生产消息

  • 消息交换机(Exchange): 主要负责接收消息,并提供消息路由策略,一个Exchange可以多个Queue绑定,Producer在传递消息时,会传递一个ROUTING_KEY,Exchange会根据这个key按照特定的算法,将消息路由转发给指定的Queue,Exchange主要有四种类型,分别是direct(默认),fanout,topic以及headers

      1.  direct:直接交换器,工作方式类似于单播,Exchange会将消息发送至完全匹配ROUTING_KEY的QUEUE
      2.  fanout: 广播式交换器,忽略ROUTING_KEY,会将消息转发至所有绑定的Queue
      3.  topic: 主题交换器,工作方式类似于组播,转发规则类似于正则匹配,例如Exchange会将ROUTING_KEY为user.stock的消息转发给*.stock,user.stock等的队列
      4.  headers: 会忽略ROUTING_KEY,使用headers来匹配,headers是一个键值对,生产者定义一些键值对,接受者也可以在绑定的时候出入一些键值对,两者匹配的时候,则对应的队列就可以收到消息。
    
  • 队列(queue):提供FIFO(先进先出)的处理机制,主要用来缓存消息,队列的消息可以设置为持久化,临时或者自动删除

      1. 持久化: queue中的消息会在Server的本地硬盘存储一份,防止系统Crash,导致数据丢失
      2. 临时: queue中的消息会在系统重启之后丢失
      3. 自动删除队列:当没有消费者来消费队列时,队列中的数据就会被删除
    
  • 绑定(Binding):绑定就是将一个特定的Exchange和一个特定的Queue绑定起来,Exchange和Queue的绑定可以是多对多的关系

  • 虚拟主机(Virtual Host):在RabbitMQ Server上面可以创建多个Virtual Host,也称作Message Broker,每一个Virtual Host相当于一个Mini的RabbitMQ Server,分别管理着自己的exchange和bindings,主要目的是为了实现不同的APP之间的隔离,是的应用安全的运行于不同的Vhost上面。Producer和Consumer连接RabbitMQ时需要指定一个Vhost。