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。