一、RabbitMq介绍
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
问题来了,什么是消息队列?
MQ全称为Message Queue,即消息队列。“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。
消息队列可以解决哪些问题?
使用消息队列,异步处理请求,将不必同步处理且耗时的操作,交由消息队列,并通知消息接收方进行异步处理,减少了应用程序的响应时间。解决高并发环境下,大量的同步请求堵塞。
生产方通过MQ与消费方交互,不必在服务器内部提供接口,解耦应用程序。
主流的MQ实现方式:AMQP、JMS
-
JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
-
JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
-
JMS规定了两种消息模型;而AMQP的消息模型更加丰富
代表产品:ActiveMQ:基于JMS ;RabbitMQ:基于AMQP协议;
RabbitMQ工作原理
组成部分:
- Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
- Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
- Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
- Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
- Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
二、四种常见的队列模式
1、direct模式(直接模式)
生产者将消息发送到交换器;队列根据routing_key接收消息,消费者消费queue接收到的消息。生产者也可以直接将消息发送给queue,而不设定Exchange以及路由键;
2、fanout模式(广播)
生产者将消息发送到交换器;队列接收所有消息,消费者消费指定queue接收到的消息;