RabbitMQ简介

一、安装和使用方式

  • 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 (模拟者) 模拟者,无法登录管理控制台。

相关推荐
wy02_7 小时前
Linux下载RabbitMQ,并解决Github拒绝访问443的问题
linux·rabbitmq·github
Java移动技术栈1 天前
深入理解 Java 队列:实现原理、场景与实战指南
java·消息队列
浩哲Zhe1 天前
RabbitMQ
java·分布式·rabbitmq
Allen Bright1 天前
RabbitMQ中的Topic模式
分布式·rabbitmq
Allen Bright1 天前
Spring Boot 整合 RabbitMQ:手动 ACK 与 QoS 配置详解
spring boot·rabbitmq·java-rabbitmq
一路狂飙的猪2 天前
RabbitMQ的工作模型
分布式·rabbitmq
来一杯龙舌兰2 天前
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
分布式·rabbitmq·ruby·持久化·ack·消息确认
Allen Bright2 天前
Spring Boot 整合 RabbitMQ:从入门到实践
spring boot·rabbitmq·java-rabbitmq
bug_null3 天前
RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件
分布式·rabbitmq
kingbal3 天前
RabbitMQ:添加virtualHost
分布式·rabbitmq