RabbitMQ的优点:
- 开源, 性能有效, 稳定性好
- 提供可靠性消息投递模式(confirm), 返回模式(return)等
- 与Spring完美整合, API丰富
- 集群模式丰富, 支持表达式配置, 高可用HA模式, 镜像队列模型
- 可以保证数据不丢失的前提下做到高可靠性, 可用性
RabbitMQ高性能原因:
- 由Erlang语言开发,继承其天生的并发性,稳定性和安全性有保障
RabbitMQ的协议:
AMQP(Advanced Message Queuing Protocol)高级消息队列协议,是一个异步消息传递所使用应用层协议规范,为面向消息中间件设计,基于此协议的客户端与消息中间件可以无视消息来源传递消息,不受客户端、消息中间件、不同的开发语言环境等条件的限制。
设计概念解释:
- 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, 消息队列, 用于保存消息并将它们转发给消费者
RabbitMQ整体架构
RabbitMQ成员简介
Binding-绑定
- Exchange和Exchange, Queue之间的连接关系
- 绑定中可以包含RoutingKey或者参数
Queue-消息队列
- 消息队列, 实际存储消息数据
- Durability : 是否持久化
- Auto delete : 如选yes,代表当最后一个监听被移除之后, 该Queue会自动被删除
Message-消息
- 服务和应用程序之间传送的数据
- 本质上就是一段数据, 由Properties和Payload(Body)组成
- 常用属性 : delivery mode, headers(自定义属性)
- 其他属性content_type