官网链接——https://www.rabbitmq.com/getstarted.html
RabbitMQ简介
- RabbitMQ使用Erlang语言开发的(Erlang天生支持高并发)
- RabbitMQ是一个开源的消息代理服务器
- RabbitMQ可以跨平台,跨语言
- 基于AMQP协议来实现
- 数据一致性,稳定性,可靠性很好,性能和吞吐量不是特别高,所以在金融行业使用的比较多
RabbitMQ的特点
- 高可靠——RabbitMQ 提供了多种多样的特性让你在可靠性和性能之间做出权衡,包 括持久化、发送应答、发布确认以及高可用性
- 灵活的路由——通过交换机(Exchange)实现消息的灵活路由。
- 支持多客户端——对主流开发语言(Python、Java、Ruby、PHP、C#、JavaScript、 Go、Elixir、Objective-C、Swift 等)都有客户端实现。
- 集群与扩展性——多个节点组成一个逻辑的服务器,支持负载。
- 高可用队列——通过镜像队列实现队列中数据的复制。
- 权限管理——通过用户与虚拟机实现权限管理。
- 插件系统——支持各种丰富的插件扩展,同时也支持自定义插件。
- 与 Spring 集成——Spring 对 AMQP 进行了封装。
AMQP
AMQP介绍
- AMQP全称Advanced Message Queuing Protocol(高级消息队列协议)
- 是具有现代特征的二进制协议
- 是一个提供统一消息服务的应用层标准高级消息队列协议
- 是应用层协议的一个开放标准
- 为面向消息的中间件设计
AMQP协议模型
Broker
- 消息队列服务器实体
- 又称之为server
Connection
- TCP的长连接
- 应用程序与Broker的网络链接
Channel
- 网络信道
- 因为对于操作系统来说建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念,以复用一条TCP连接
- 信道是建立在真实的TCP连接内的虚拟连接
- AMQP命令都是通过信道发出去的(几乎所有操作都在信道中进行)
Message
- 消息
- 服务器和应用程序之间传输的数据
- 由Properties和Body组成
- Properties可以对消息进行修饰,比如优先级,延迟等高级特性
- Body则是消息体
Virtual Host
- 虚拟主机/虚拟地址
- 用于进行逻辑隔离
- 表示一批交换器、消息队列和相关对象
- Virtual Host是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的vhost是 /
- 每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制
Exchange
- 交换机
- 用来接收生产者发送的消息并根据路由键将这些消息路由给服务器中的队列
- Exchenge有4中类型direct(默认)、fanout、topic和headers
- 不同类型的Exchange转发消息的策略有所有区别
Binngding
- 用于队列和交换机之间的关联
- 绑定中包含路由键
- Exchanger和Queue的绑定可以是多对多的关系
- Exchanger和Queue的绑定可以绑定多次只是绑定规则不一样
Routing Key
- 路由键
- 一个字符串
- 虚拟机用它来确定如何路由一个特定消息
Queue
- 队列
- 用来保存消息直到发送给消费者
- 一个消息可进入一个或多个队列
- 消息一直在队列里面,等待消费者连接到这个队列将其取走