什么是消息队列?

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的基本结构:

rabbitmq消息队列类型 rabbitmq与其他消息队列_rabbitmq消息队列类型

组成部分说明:

  • Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
  • Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
  • Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
  • Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
  • Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。

生产者发送消息流程:

  1. 生产者和Broker建立TCP连接
  2. 生产者和Broker建立通道
  3. 生产者通过通道消息发送给Broker,Exchange将消息进行转发
  4. Exchange将消息转发到指定的Queue(队列)

消费者接收消息流程:

  1. 消费者和Broker建立TCP连接
  2. 消费者和Broker建立通道
  3. 消费者监听指定的Queue(队列)
  4. 当有消息到达Queue时Broker默认将消息推送给消费者
  5. 消费者接收到消息
  6. ack回复

六种消息模型

  1. 基本消息模型
  2. work消息模型
  3. publish/subscribe(交换机类型:Fanout,也称为广播)
  4. Routing 路由模型(交换机类型:direct)
  5. Topics 通配符模式(交换机类型: topics)
  6. RPC