一、安装和使用方式
- 1.https://www.erlang.org/ https://www.rabbitmq.com/
- 2.先安装Erlang,管理员安装,在安装rabbitMQ,也是管理员安装,因为rabbitMQ是用Erlang语言开发的。且每个版本的RabbitMQ对应不同的Erlang版本,官网都有对应表,还有这两个安装目录不能有中文名字和空格
- 3.进入RabbitMQ安装目录的sbin下,cmd后,执行 rabbitmq-plugins enable rabbitmq_management
- 4.重启RabbitMQ服务,然后Sbin下,执行 rabbitmq-server.bat
- 5.浏览器 http://127.0.0.1:15672 用户名密码都是guest,进入rabbitMQ的管理页面
资源下载:参考绑定资源
二、基本概念理解
1.Connections:是真正的TCP/IP连接
2.Channel(信道):多路复用连接中的一条独立的双向数据流通道。它是建立在真实的TCP连接内的虚拟连接,复用TCP连接的通道。其实就是因为创建和关闭TCP连接开销都很大,所以尽量少建立连接,建立连接后开辟多个信道,让这个连接复用。
3.Exchange(交换器路由器):提供Producer到Queue之间的匹配,接收生产者发送的消息并按照路由规则转发到相应队列,本身不存,如果没有队列绑定到Exchange,发来的消息就丢弃。
其实是为了解耦生产者和消息队列,生产者只管发送给Exchange,由Exchange来设置路由规则,转发到不同的队列。它有4种消息调度策略:fanout,direct,topic,headers。
4.Bingding(绑定):用于建立Exchange和Queue间关联,它就是路由规则,也可以理解为Exchange是一个由Binding构成的路由表。
Bingding Key(绑定键):Exchange和Queue的绑定关系,用于匹配Routing Key,最大255字节。
5.Queue(消息队列):存储消息的一种数据结构,用来保存消息,直到消息发送给消费者,它是消息的容器,也是消息的终点。
一个消息可以投入多个队列,但一个消息只能被一个订阅者接收,比如多个订阅者订阅一个队列,队列里的消息会平均分配给多个订阅者,而不是所有订阅者消息一样的。
6.Producer是生产者,Consumer是消费者,Message是消息由消息头和消息体构成,消息不透明。
消息头由可选属性:routing-key(路由键)、prionity(消息优先权)、delivery-mode(是否持久性存储)等构成。路由键标记路由规则,最大255字节。
7.Broker(代理):RabbitMQ Service,服务器实体。
8.Virtual Host: 虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,
拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 /
9.Exchange消息调度策略
三个因素:Exchange Type(Exchange的类型),Binding Key(Exchange和Queue的绑定关系),消息的标记信息(Routing Key和headers)。
生产者发送消息的时候一般会指定一个已经在Exchange中配置好Routing Key,Exchange接收到后会根据Routing Key与Exchange Type和Bing Key联合使用确定消息进入哪个队列。
Exchange Type和Bingding Key一般都是固定配置好的。
Exchange Type:fanout,direct,topic,headers。
1).Fanout(订阅模式|广播模式)
交换器会把给它的所有消息发送到该交换器有绑定的消息队列中,在这种模式下,Bingding key和Routing Key无效了,只要有绑定就转发,
类似子网广播,每台机器都活得一份复制的消息。这种模式是最快的。
2).Direct(路由模式)
这是一种精确匹配:消息的Routing Key与Exchange和Queue间的Bingding Key完全匹配时候才转发到该Queue。Direct是Exchange的默认模式。
MQ默认提供了一个名字是空字符串的,类型是Direct,并且绑定到所有Queue(每一个Queue和这个无名Exchange间的Bingding Key是Queue的名字)的Exchange。
3).Topic策略
这是一种模糊匹配。Topic通过模式匹配分配消息,姜路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。
可以理解为直接策略的进阶版,直接策略(如Direct)是完全精确匹配,而topic则支持正则匹配,满足某类指定规则的,可以分发过去。
4).Headers策略
这个用的不多,他说根据Message的一些头部信息来分发过滤Message,忽略routing key的属性,如果header信息和message消息相匹配分发。
三、界面简介
1.Overview
MQ的概览情况,里面包括集群各个节点的信息、端口映射信息;
Totals: 准备消费的消息数、待确认的消息数、消息总数以及消息的各种处理速率(发送速率、确认速率、写入硬盘速率等等)。
Nodes: 其实就是支撑 RabbitMQ 运行的一些机器,相当于集群的节点。点击每个节点,可以查看节点的详细信息。
Churn statistics: 展示的是 Connection、Channel 以及 Queue 的创建/关闭速率。这个里边展示了端口的映射信息以及 Web 的上下文信息。
Ports and contexts:
5672 是 RabbitMQ 通信端口。
15672 是 Web 管理页面端口。
25672 是集群通信端口。
Export definitions && Import definitions: 两个可以导入导出当前实例的一些配置信息:
2.Connections
MQ运行中的当前保持连接的连接信息,其中包含了连接的虚拟主机路径(virtual host),链接的主机及端口、那个用户连接的,状态等信息。在java代码中通过ConnectionFactory 的 newConnection() 后进行创建一个连接,无论是消息生产者还是消息消费者,只要连接上来了这里都会显示出来,当使用connection.close()之后 连接将关闭。
3.Channels
信道或者通道,Channel是在连接中存在的,一个Connection中可以有多个Channel。在Java代码中 通过连接来创建信道。当代码执行connection.createChannel(),该界面下面就会有信道信息,它和连接紧密相关;一个连接可以有多个通道,这个多个通道通过多线程实现,一般情况下,我们在通道中创建队列、交换机等。生产者的通道一般会立马关闭;消费者是一直监听的,通道几乎是会一直存在。
Channel:通道名称。
User name:该通道登录使用的用户名。
Model:通道确认模式,C 表示 confirm;T 表示事务。
State:通道当前的状态,running 表示运行中;idle 表示空闲。
Unconfirmed:待确认的消息总数。
Prefetch:Prefetch 表示每个消费者最大的能承受的未确认消息数目,简单来说就是用来指定一个消费者一次可以从 RabbitMQ 中获取多少条消息并缓存在消费者中,一旦消费者的缓冲区满了,RabbitMQ 将会停止投递新的消息到该消费者中直到它发出有消息被 ack 了。总的来说,消费者负责不断处理消息,不断 ack,然后只要 unAcked 数少于 prefetch * consumer 数目,RabbitMQ 就不断将消息投递过去。
Unacker:待 ack 的消息总数。
publish:消息生产者发送消息的速率。
confirm:消息生产者确认消息的速率。
unroutable (drop):表示未被接收,且已经删除了的消息。
deliver/get:消息消费者获取消息的速率。
ack:消息消费者 ack 消息的速率。
4.Exchange
***交换机,它与队列进行绑定后,消息根据exchang的类型,按照不同的绑定规则分发消息到消息队列中,可以是一个消息被分发给多个消息队列,也可以是一个消息分发到一个消息队列,和队列紧密相关;
Type 表示交换机的类型。
Features 有两个取值 D 和 I。D 表示交换机持久化,将交换机的属性在服务器内部保存,当 MQ 的服务器发生意外或关闭之后,重启 RabbitMQ 时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。I 表示这个交换机不可以被消息生产者用来推送消息,仅用来进行交换机和交换机之间的绑定。
Message rate in 表示消息进入的速率。Message rate out 表示消息出去的速率。
name 添加的交换机名称
type 交换机类型,有四种;
直连交换机:Direct exchange;
扇形交换机:Fanout exchange;
主题交换机:Topic exchange;
首部交换机:Headers exchange
Durability 是否需要持久化,设置是否持久 durab 设置为 true 表示持久化, 反之是非持久,设置为true则将Exchange存盘,即使服务器重启数据也不会丢失
Auto delete设置是否自动删除,当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange,简单来说也就是如果该Exchange没有和任何队列Queue绑定则删除
Internal 设置是否为rabbitmq内部使用, true表示是内部使用, false表示不是内部使用
Arguments 分发器的其他设置项,json格式;可以设置消息最大数量等属性
下面还有一些常用的操作:
Bindings:交换机和队列建立绑定关系
Publish message:发送消息;通过交换机发送消息到和它有绑定关系的队列中;
5.Queue
队列,是Massage的落脚点和等待接收的地方,Queue很适合做负载均衡,RabbitMQ可以在若干consumer中间实现轮流调度(Round-Robin);
Features: 表示消息队列的特性,D 表示消息队列持久化。
State: 表示当前队列的状态,running 表示运行中;idle 表示空闲。
Ready: 表示待消费的消息总数。
Unacked: 表示待应答的消息总数。
Total: 表示消息总数 Ready+Unacked。
incoming: 表示消息进入的速率。
deliver/get: 表示获取消息的速率。
ack: 表示消息应答的速率。
Add a new queue 可以添加一个新的消息队列。
点击每一个消息队列的名称,可以进入到消息队列中。进入到消息队列后,可以完成对消息队列的进一步操作;发送消息。获取一条消息。移动一条消息(需要插件的支持)。删除消息队列。清空消息队列中的消息。
**Durablity: ** 持久化选项,Durable(持久化保存),Transient(即时保存), 持久化保存会在RabbitMQ宕机或者重启后,未消费的消息仍然存在,即时保存在RabbitMQ宕机或者重启后交换机会不存在。需要重新定义该Exchange。
即使保存可以理解为计算机内存,关机就没了。
持久化保存可以理解为硬盘,关机,文件还在。
Ack mode中:
Nack message requeue true 获取消息,不做ack应答,消息重新入队列;
reject requeue true 拒绝获取消息,消息重新放入队列;
reject requeue false 拒绝获取消息,消息不重新入队列,会删除消息;
Automatic ack 自动ack应答,收到消息,消息会删除
6.Admin
用户增删改查以及虚拟主机、规则等的配置;
各项属性含义如下:
Name: 表示用户名称。
Tags: 表示角色标签,只能选取一个。
Can access virtual hosts: 表示允许进入的虚拟主机。
Has password: 表示这个用户是否设置了密码。常见的两个操作是管理用户和虚拟主机。
Add a user 可以添加一个新的用户,添加用户的时候需要给用户设置 Tags,其实就是用户角色,如下:
none: 不能访问 management plugin
management: 用户可以通过 AMQP 做的任何事 列出自己可以通过 AMQP 登入的 virtual hosts 查看自己的 virtual hosts 中的 queues,
exchanges 和 bindings 查看和关闭自己的 channels 和 connections 查看有关自己的 virtual hosts 的“全局”的统计信息,包含其他用户在这些 virtual hosts 中的活动
policymaker: management 可以做的任何事 查看、创建和删除自己的 virtual hosts 所属的 policies 和 parameters
monitoring:management 可以做的任何事 列出所有 virtual hosts,包括他们不能登录的 virtual hosts 查看其他用户的 connections 和 channels 查看节点级别的数据如 clustering 和 memory 使用情况 查看真正的关于所有 virtual hosts 的全局的统计信息
administrator:policymaker 和 monitoring 可以做的任何事 创建和删除 virtual hosts 查看、创建和删除 users 查看创建和删除 permissions 关闭其他用户的 connections
impersonator (模拟者) 模拟者,无法登录管理控制台。