什么是消息队列?
MQ全称为 Message Queue 即消息队列,"消息队列"是在消息的传输过程中保存消息的容器.它是典型的: 生产者,消费者模型.生产者不断向消息队列中生产消息,消费者不断从队列中获取消息,因为消息的生产和消费都是异步的,而且只关心消息的发送和接受,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦.
开发中消息队列的应用场景
- 任务异步处理
- 应用程序解耦合
AMQP和JMS
MQ是消息通信的模型,并发具体实现,现在实现MQ的有两种主流方式:AMQP,JMS.
两者的区别和联系:
- JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据的交互格式
- JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的
- JMS规定了两种消息模型;而AMQP的消息模型更加丰富
常见的MQ产品
- ActiveMQ:基于JMS
- RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
- RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会
- Kafka:分布式消息系统,高吞吐量
RabbitMQ快速入门
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。RabbitMQ官方地址:http://www.rabbitmq.com
RabbitMQ的工作原理
下图是RabbitMQ的基本结构:
组成部分说明:
- Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
- Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
- Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
- Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
- Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
生产者发送消息流程:
- 生产者和Broker建立TCP连接
- 生产者和Broker建立通道
- 生产者通过通道消息发送给Broker,Exchange将消息进行转发
- Exchange将消息转发到指定的Queue(队列)
消费者接收消息流程:
- 消费者和Broker建立TCP连接
- 消费者和Broker建立通道
- 消费者监听指定的Queue(队列)
- 当有消息到达Queue时Broker默认将消息推送给消费者
- 消费者接收到消息
- ack回复
六种消息模型
- 基本消息模型
- work消息模型
- publish/subscribe(交换机类型:Fanout,也称为广播)
- Routing 路由模型(交换机类型:direct)
- Topics 通配符模式(交换机类型: topics)
- RPC