1 为什么使用 RabbitMQ
开源的消息代理和队列服务器,通过普通协议在完全不同的应用间共享数据,使用Erlang语言编写,并且基于AMQP协议。
据报道,滴滴、美团、头条、去哪儿、艺龙…都选择了它:
- 开源,性能优秀,稳定性有保障
- 提供可靠性消息投递模式(confirm),返回模式(return)
- 与Spring AMQP完美整合,API丰富
- 集群模式丰富,表达式配置,HA模式,镜像队列模型
- 保证数据不丢失的前提做到高可靠性、可用性
2 高性能之源
- Erlang语言
最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能非常优秀 - Erlang的优点
Erlang有着和原生Socket一样的延迟
3 AMQP协议
AMQP,Advanced Message Queuing Protocol,高级消息队列协议。
一个提供统一消息服务的应用层标准的二进制的高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于该协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品、不同的开发语言等条件的限制。
- AMQP的实现
RabbitMQ、OpenAMQ、Apache Qpid、Redhat、Enterprise MRG、AMQP Infrastructure、ØMQ、Zyre等。
4 协议模型
5 AMQP核心概念
- Server,又称Broker
接受客户端的连接,实现AMQP实体服务 - Connection 连接
应用程序与Broker的网络连接 - Channel,网络信道
几乎所有操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务 - Message:消息
服务器和应用程序之间传送的数据,由Properties和Body组成。
Properties
可修饰消息, 比如消息的优先级、延迟等高级特性Body
消息体内容- Virtual host:虚拟地址
用于逻辑隔离,最上层的消息路由,类似命名空间。一个Virtual Host里可以有若干Exchange和Queue,同一Virtual Host里不能有相同名称的Exchange或Queue - Exchange:交换机
接收消息,根据路由键转发消息到绑定的队列 - Binding
Exchange和Queue之间的虚拟连接,binding中可以包含routing key - Routing key
一个路由规则,虚拟机可用它来确定如何路由一个特定消息 - Queue,也称为Message Queue,消息队列
保存消息并将它们转发给消费者
6 RabbitMQ工作架构模型
7 特性
1、可靠性
2、灵活的路由
3、消息集群
4、高可用
5、多种协议
6、多语言客户端
7、管理界面
8、插件机制
8 基本使用
8.1 常用命令
- 启动服务
rabbitmq-server start & • 1
- 停止服务
rabbitmqctl stop_ app • 1
- 管理插件
rabbitmq-plugins enable rabbitmq_ management • 1
8.2 重启操作
9 quickstart - 消息的生产与消费
9.1 基本构建缺一不可
- ConnectionFactory:获取连接工厂
- Connection:一个连接
- Channel:数据通信信道,可发送和接收消息
- Queue:具体的消息存储队列
- Producer & Consumer生产和消费者
9.2 实操演示
- Pro
- Con
由于是Con端才创建有对列,所以必须先启动Con端,再启动Pro端!
分别启动运行