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

相关推荐
可观测性用观测云5 小时前
阿里云 RabbitMQ 可观测性最佳实践
rabbitmq
腾讯云中间件6 小时前
深度剖析 TDMQ RabbitMQ 版经典队列底层存储机制
消息队列·rabbitmq·腾讯
Bug退退退12310 小时前
RabbitMQ 之顺序性保障
服务器·分布式·rabbitmq
鼠鼠我捏,要死了捏1 天前
基于Redis Streams的实时消息处理实战经验分享
redis·消息队列·redis streams
泉城老铁1 天前
Spring Boot深度整合RabbitMQ:从入门到企业级实战
java·后端·rabbitmq
西岭千秋雪_3 天前
RabbitMQ队列的选择
笔记·分布式·学习·rabbitmq·ruby
Bug退退退1234 天前
RabbitMQ 之消息积压
分布式·rabbitmq
Bug退退退1235 天前
RabbitMQ 高级特性之事务
java·分布式·spring·rabbitmq
咖啡啡不加糖5 天前
RabbitMQ 消息队列:从入门到Spring Boot实战
java·spring boot·rabbitmq
钩子波比5 天前
🚀 Asynq 学习文档
redis·消息队列·go