RabbitMQ 相关概念及简述
总结自:BV15k4y1k7Ep
RabbitMQ 是一款常用的消息队列(MQ)。
什么是消息队列
MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。
消息队列中间件是分布式系统中重要的组件,主要用于应用解耦,异步消息,流量削锋等(参见消息队列作用)。
1.2. AMQP 和 JMS
MQ 是消息通信的模型;实现 MQ 大致有两种主流方式:AMQP、JMS。
1.2.1. AMQP
AMQP 是一种协议,更准确的说是一种 binary wire-level protocol(链接协议)。这是其和 JMS 的本质差别,AMQP 不从 API 层进行限定,而是直接定义网络交换的数据格式。
1.2.2. JMS
JMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个 Java 平台中关于面向消息中间件的 API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
1.2.3. AMQP 与 JMS 区别
- JMS 是定义了统一的接口,来对消息操作进行统一;AMQP 是通过规定协议来统一数据交互的格式。
- JMS 限定了必须使用 Java 语言;AMQP 只是协议,不规定实现方式,因此是跨语言的。
- JMS 规定了两种消息模式;而 AMQP 的消息模式更加丰富。
1.3. 消息队列产品
市场上常见的消息队列有如下:
- ActiveMQ:基于 JMS
- ZeroMQ:基于 C 语言开发
- RabbitMQ:基于 AMQP 协议,Erlang 语言开发,稳定性好
- RocketMQ:基于 JMS,阿里巴巴产品
- Kafka:类似 MQ 的产品;分布式消息系统,高吞吐量
1.4. RabbitMQ
RabbitMQ 是由 Erlang 语言开发,基于 AMQP(Advanced Message Queue Protocol 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
RabbitMQ 官方地址:http://www.rabbitmq.com/
RabbitMQ 提供了 6 种模式:
- 简单模式:一个生产者 + 一个队列 + 一个消费者;
- Work queues 工作队列模式:一个生产者 + 一个队列 + 多个消费者(消费者之间竞争消息);
- Publish/Subscribe 发布与订阅模式:一个生产者 + 一个队列 + 多个消费者(广播消息到所有消费者);
- Routing 路由模式:一个生产者 + 一个队列 + 多个消费者(消费者消费指定 Routing key 的消息);
- Topics 主题模式:一个生产者 + 一个队列 + 多个消费者(消费者消费指定 Topics 的消息);
- RPC 远程调用模式(远程调用,不太算 MQ)。