一、简介
RabbitMQ 是信息传输的中间者。本质上,他从生产者(producers)接收消息,转发这些消息给消费者(consumers).换句话说,他能够按根据你指定的规则进行消息转发、缓冲、和持久化。
二、为什么要用RabbitMQ
对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统等,那么这些模块如何通信?如果使用socket或者http接口调用的话,还是有很多的问题需要解决。
1)信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据如何防止丢失?
2)如何降低发送者和接收者的耦合度?
3)如何让优先级高的接收者先接到数据?
4)如何做到负载均衡?有效均衡接收者的负载?
5)如何有效的将数据发送到相关的接收者?也就是说将接收者订阅不同的数据,如何做有效的过滤。
6)如可扩展
对于上述的这些问题,RabbitMQ可以很好的解决这些问题。使用RabbitMQ可以很好的解耦模块A与模块B之间的通信,模块A异步将消息发送到MQ中,或者MQ结合Flume主动去取消息,然后再将消息发送到模块B中。由于消息是可以是MQ发送到模块B中,所以可以控制优先级高的消费者先接收到消息,也可以控制/过滤 消息可以发往哪些消费者,对消息的处理非常的灵活。
RabbitMQ 是一个消息中间间,顾名思义就是暂时存储消息的载体。在实际运用的过程中,一般是消费者把消息发送到MQ中,如果有发布订阅的条件,MQ会把消息推送到订阅者端(消费者),如果是点对点模式,MQ中的消息是消费者主动发起到相应的队列中获取消息。RabbitMQ常用的模式有:Direct(点对点模式)、Fanout(广播模式)、Topic(主题模式) 后面会结合代码做详细的介绍。