历史
rabbitMQ 是一个消息队列的中间件主要体现在message queue ,rabbit为兔子来体现速度快。
mq的提出,是想在软件层面提出类似于硬件上的bus总线的产品,用于应用间的消息传递。
同时amqp (高级消息队列协议)标准的建立,使得rabbitmq在实现amqp协议的特性,能够基于协议本身来对消息队列进行配置。
相关概念
在消息队列的概念中存在关键的概念,消费者生产者。从现实世界其实可以将很多事务抽象成这两部分。
rabbitmq中包含关键几个部分就是:队列、交换机、信道、绑定。
信道是在tcp连接上建立的,在一个tcp连接上基于amqp协议建立信道抽象层,可以同时建立多条信道。这就避免了tcp断开和连接的消耗了。基于tcp特性当一个连接在发数据行为时,是无法进行收数据的操作(从tcp的层面理解)。如果抽象出send channel 和recv channel
就可以具有全双工的特性,同一时刻可以收发操作。
消息
一个消息被生产,发送到交换机,根据不同类型的交换机采用不同的策略将消息分发到队列
持久化
当交换机和队列duration设置为true时并不能保证消息的能够在重启后恢复。
消息同时需要设置delivery mode设置为2,而且消息最终需要处于到达持久化队列的状态。
一但消息被路由到非持久化队列上,该消息就不会持久化
消息的持久化会带来严重的性能消耗,磁盘和内存的读取速度差异较大。
事务
为了保证消息最终能够安全的道道queue,rabbitmq同时提供了事务,在消息传输的过程中会携带很多命令,一但消息失败就会执行回滚操作,性能消耗较大。
rabbitmq提出另一个解决方法,发送方确认机制来确保消息投递成功
虚拟机
rabbitmq提供vhost,虚拟主机,多租户模式,每个vhost是相互隔离的,就像不同的服务器虚拟机,交换机和队列彼此都不可见。rabbitmq默认vhost (/),每个用户至少绑定一个vhost。