- rabbitMQ整体架构模型是什么样子的
- rabbitMQ消息是如何流转的
- rabbitMQ安装与使用
- 命令行与管控台
- rabbitMQ消息生产与消费(Java)
- rabbitMQ交换机详解
- rabbitMQ队列 绑定 虚拟主机 消息
JMX
rabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,rabbitMQ使用的就是Erlang语言来编写的,并且rabbitMQ是基于AMQP协议。
通过不同调用api将消息发送到队列服务器中,然后后端可以调用api消费队列服务器中的消息,形成一个生产者与消费者模型
rabbitMQ优点:
- 开源,性能优秀,稳定性保障
- 提供可靠性消息投递模式confirm
- 与springAMQP完美整合,API丰富
- 集群模式丰富,基于表达式配置,HA模式,镜像队列模型
- 在保证数据不丢失的前提下做到高可用性,高可靠性
Q:rabbitMQ高性能的原因
- Erlang语言最初在于交换机领域的架构模式,这使得rabbitMQ在blocker之间进行数据交互,数据同步的性能是十分优秀的
- Erlang的优点就是:Erlang有着与原生socket一样的延时。
APC 基于socket,socket延时十分低,主要的考量目标就是延时以及响应 关注MQ的延时怎么样 性能怎么样 吞吐量怎么样。
什么是AMQP高级消息队列协议
AMQP定义:是具有现代特征的二进制协议,是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
换句话说AMQP协议就是一个规范,在编写MQ时候只要依据MQ规范编写即可。
virtual host虚拟主机 (比较上层的路由)
exchange 交换机(AMQP核心)生产者直接将消息投递到exchange中,经历三个过程
- 查找服务器,建立链接,设置地址以及端口号
- 投递到哪一个virtual host
- 然后就是投递到哪一个exchange
rabbitMQ最主要目的就是解耦和的。
consumer application是从message Queue中获取数据的,然后整个MQ最主要的一点就是exchange与message queue之间的绑定关系,不然的话message queue无法从exchange中获取消息。
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:交换机,接收消息,根据路由键转发消息到绑定的队列中。队列与exchange中有绑定关系
- binding:exchange和Queue之间的虚拟连接,binding可以包含routing key
- routing key:一个路由规则,虚拟机可以用它来确定如何路由一个指定的信息
- Queue:也称message queue,消息队列,保存消息并将它们转发给消费者