👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
《项目实战(视频)》:从书中学,往事中“练”
《互联网高频面试题》:面朝简历学习,春暖花开
《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题
《精进 Java 学习指南》:系统学习,互联网主流技术栈
《必读 Java 源码专栏》:知其然,知其所以然
👉这是一个或许对你有用的开源项目
国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。
功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:
Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud
视频教程:https://doc.iocoder.cn
前面介绍了 RabbitMQ 基础入门、安装与简单使用、基础配置等相关的知识点,今天我将详细的为大家介绍 RabbitMQ 管理界面 相关知识,希望大家能够从中收获多多!如有帮助,请点在看 、转发 支持一波!!!
管理界面概览
![8777558df8ff8ce347e658ef51a87ca9.png](https://i-blog.csdnimg.cn/blog_migrate/eb32a545034e5cbc25861d84312fd6da.png)
该页面是RabbitMQ主界面,总共有六个选项卡:
Overview
MQ的概览情况,里面包括集群各个节点的信息、端口映射信息。
connections:
无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况。
channels:
通道,建立连接后,会形成通道,消息的投递获取依赖通道。
Exchanges:
交换机,用来实现消息的路由。
Queues:
队列,即消息队列,消息存放在队列中,等待消费,消费后被移除队列。
Admin:
管理用户。
下面将对各个模块中的子模块进行详细的介绍。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
视频教程:https://doc.iocoder.cn/video/
Overview 模块
Node服务节点
![d877d41d3dfaa4066b4281e862c0ed22.png](https://i-blog.csdnimg.cn/blog_migrate/7627385b9dac1222c35502e5f6fd63e6.png)
Nodes项,显示的是RabbitMQ的服务节点,目前有一个本地节点,可以有多个服务节点(比如集群的时候)。
ports端口
![ed2d0df37f1d0f84057307aa9823ae19.png](https://i-blog.csdnimg.cn/blog_migrate/935d5c34c48ebed271dcb17e2ec79c43.png)
这里一共有三个端口,其中5672是amqp协议的端口,15672是RabbitMQ的管理工具端口(这就是我们现在操作的),25672是做集群的端口。
如果我们现在的Java程序要与RabbitMQ进行交互,需要和哪个端口交互呢?是5672。因为Java客户端需要与RabbitMQ服务进行数据交互,必须要遵循amqp协议协议,所以要走5672端口。
而15672是RabbitMQ的管理工具的端口,与服务无关,仅仅是管理工具运行的端口。
Export definitions和Import definitions
![36293ec55663e8b4309b2245682d2c0a.png](https://i-blog.csdnimg.cn/blog_migrate/491742072daa8c81d301d081284e46d3.png)
Export definitions为导出RabbitMQ的基本信息
Import definitions为导入RabbitMQ的基本信息
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/yudao-cloud
视频教程:https://doc.iocoder.cn/video/
Admin模块
添加用户
上面的Tags选项,其实是指定用户的角色,可选的有以下几个:
超级管理员(administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
监控者(monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
普通管理者(management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
创建虚拟机Virtual Hosts
为了让各个用户可以互不干扰的工作,RabbitMQ添加了虚拟主机(Virtual Hosts)的概念。其实就是一个独立的访问路径,不同用户使用不同路径,各自有自己的队列、交换机,互相不会影响。
![254a1d73221104c0db9d873790b74ebe.png](https://i-blog.csdnimg.cn/blog_migrate/adcd957b95f9478f706a7c2b52e2d981.png)
![8ee5616081a9491990a855de30ed4e6f.png](https://i-blog.csdnimg.cn/blog_migrate/01db63312cbe0c3458456691e2f8ebbc.png)
创建好虚拟主机,我们还要给用户添加访问权限,点击添加好的虚拟主机:
![b19c2808392daf5b64447fe2be78f4ef.png](https://i-blog.csdnimg.cn/blog_migrate/9c2bd7d016835305f3ac85d23c94b472.png)
进入虚拟主机设置界面,给用户设置权限
![f88a653045e283ebef465f7f289c23f7.png](https://i-blog.csdnimg.cn/blog_migrate/4e0d460aa411cb0bb9440519548144e5.png)
Connections 连接
在这里可以看客户端连接RabbitMQ服务的信息。目前尚未有客户端连接,所以上面看不到连接信息。
![19a7989e6a5a8a2a214a5fa6127fabde.png](https://i-blog.csdnimg.cn/blog_migrate/e5e816a0a87ea777cd374b6285f3f96a.png)
Channels(通道)
在这里可以看客户端连接RabbitMQ通道的信息。通道是建立在连接之上的,因为现在没有连接,所以也没有通道。
![69e4caf4f17a8b1e1f3adbd8b8d0f56c.png](https://i-blog.csdnimg.cn/blog_migrate/9eee82ce7f849179c52045244c4f3081.png)
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 消息的速率。
Exchanges(交换机)
Exchanges选项有交换机的信息,并且可以通过Add a new exchange来添加交换机。
![da09f1288914f22cb1c1667f3ae6643d.png](https://i-blog.csdnimg.cn/blog_migrate/b97ea07a27d78f5242ea521225109474.png)
![0339b578cdc86dc3134f70cca01002b1.png](https://i-blog.csdnimg.cn/blog_migrate/b9c13c34f1d53c342e219de2ef0aa236.png)
添加exchange的属性说明:
Name #exchange的名称
Type #exchange的类型,可选值为direct, headers, topic, fanout
Durability #是否需要持久化, Durable表示持久化,即rabbitmq重启后exchange不会被清除,依旧存在
Auto Delete #是否自动删除,默认是No。自动删除的触发条件是:当绑定到该exchange上的所有queue和exchange都已经解除绑定时,rabbitmq自动删除该exchange。
Internal #是否为rabbitmq内部使用,默认NO。如果是,客户端不能直接投递消息到此交换器,只能由rabbitmq自己向这个exchange投递消息,一般用于exchange到exchange的绑定。
Arguments #其他选项参数, 一般设置为[],不需要。
Queues
Queues选项有queue的信息,并且可以通过Add a new queue来添加queue。
![6b74283c3f6d47024ded74acc09f2b0f.png](https://i-blog.csdnimg.cn/blog_migrate/25320df405790bc6081e5005bd389ca6.png)
添加queue属性说明:
Name #queue的名称
Durability #Durable表示持久化,即rabbitmq重启后,不会清除该queue,保留queue
Auto delete#是否自动删除,默认NO。自动删除触发条件:当所有消费客户端连接断开后,会删除该消息队列。
当Queue中的 autoDelete 属性被设置为true时,那么,当所有消息接收者宕机或者关闭连接后,消息队列则会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收最新的消息,而宕机期间的消息则会丢失。
当Quere中的 autoDelete 属性被设置为false时,那么,当消息接收者宕机,关闭后,消息队列不会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收包括宕机期间的消息。
Arguments #其他选项参数,如TTL,Auto expire等,在该选项下面有参数选择。
下面,我创建一个name为myqueue的消息队列,创建完成后,会在queue表格中看到。
![9af31b2f578253cbfa835e816916dc80.png](https://i-blog.csdnimg.cn/blog_migrate/8e0072ef3aa6e638f715383312a8c582.png)
创建了exchange和queue之后,我们还需要将queue绑定到exchange。下面我将上面创建的myqueue绑定到exchange上,在queues页面,点击我们需要绑定的队列,进入到详情页,在Add binding to this queue中填入exchange名称和路由键。然后就可以在对应的exchange详情页的bingdings看到绑定信息。
![cadc0ce78ef71405d035b3efe8788c0f.png](https://i-blog.csdnimg.cn/blog_migrate/aae1b7b9b918d73bb6d2e440af8dc874.png)
![a3d0f296009a511855a3174c91ec871b.png](https://i-blog.csdnimg.cn/blog_migrate/ebcfc761285c5154fba9b1e1d110a88d.png)
实际操作发送消费消息
Direct
DirectExchange 的路由策略是将消息队列绑定到一个 DirectExchange 上,当一条消息到达 DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为 “queue.test”,则 routingkey 为 “queue.test” 的消息会被该消息队列接收。
新建direct交换机:
![1a87a3ea01b74505b02aebd14d3b4560.png](https://i-blog.csdnimg.cn/blog_migrate/b5b8558b0914789d9ba4bb3c24c24eeb.png)
![4a97083a71296e84c76d93abed58938d.png](https://i-blog.csdnimg.cn/blog_migrate/5f5f28b009e1d69d43bee37975180741.png)
新建普通队列
![59852607ec72cf2a31a54d6f6880d58b.png](https://i-blog.csdnimg.cn/blog_migrate/cf6081f40bbe658af13ecede334ebbfd.png)
![d357946a77bcf6b0a08bf2f02ac65d2f.png](https://i-blog.csdnimg.cn/blog_migrate/8df0a1f9f6f52beee7ec43026c6eaef8.png)
交换机和队列建立绑定关系
点击交换机进行绑定:
点击交换机发送消息:这里我发送了两条
![183556ae75e203f79f6acca0ae1dab8e.png](https://i-blog.csdnimg.cn/blog_migrate/557419cf770619aabeea31d968e4f93c.png)
发动成功:
![4eb05965776c54bc9ef55d9ee7ac644a.png](https://i-blog.csdnimg.cn/blog_migrate/b720b9ff2fe7ed215b61397291362d5d.png)
![34112dd3c154309a64d5bcac8248db06.png](https://i-blog.csdnimg.cn/blog_migrate/9a2ade7395257e658150a01143a3f3a8.png)
点击队列的消息;
![35a1a33f46ceb382ea17914e22bf6ec4.png](https://i-blog.csdnimg.cn/blog_migrate/7ec79d81ce97d3dcad8deab783583e83.png)
Fanout
FanoutExchange 的数据交换策略是把所有到达 FanoutExchange 的消息转发给所有与它绑定的 Queue 上,在这种策略中,routingkey 将不起任何作用;
新建队列:
![3778cf8d57c2e2563bff139db6f84282.png](https://i-blog.csdnimg.cn/blog_migrate/0fdb51a2f0f35dbc6caed7a7608a7614.png)
新建交换机:
![2816d43041138ca28020e337f706cdfd.png](https://i-blog.csdnimg.cn/blog_migrate/b61316f0c8eda8d77e73119fb4814375.png)
交换机和每个队列帮绑定:
![cccc1c5efc341d48ddedc09af8bc675f.png](https://i-blog.csdnimg.cn/blog_migrate/6631d9d8e513cf82bfea637fd481acdf.png)
然后给这个交换机发送消息两条消息:我们看到每个队列都收到两条消息;
![7eef63e4e32c212bbd0d18a9d3c72181.png](https://i-blog.csdnimg.cn/blog_migrate/4c2aa9674a5adc2c0aa665e9e8d4a5ef.png)
Topic
TopicExchange 是比较复杂但是也比较灵活的一种路由策略,在 TopicExchange 中,Queue 通过 routingkey 绑定到 TopicExchange 上,当消息到达 TopicExchange 后,TopicExchange 根据消息的 routingkey 将消息路由到一个或者多个 Queue 上;*(星号)可以代替一个单词,#(井号)可以替代零个或多个单词。
首先创建 TopicExchange,参数和前面的一致。然后创建三个 Queue,第一个 Queue 用来存储和 “xiaomi” 有关的消息,第二个 Queue 用来存储和 “huawei” 有关的消息,第三个 Queue 用来存储和 “phone” 有关的消息。
将三个 Queue 分别绑定到 TopicExchange 上,第一个 Binding 中的 “xiaomi.#” 表示消息的 routingkey 凡是以 “xiaomi” 开头的,都将被路由到名称为 “xiaomi” 的 Queue 上,第二个 Binding 中的 “huawei.#” 表示消息的 routingkey 凡是以 “huawei” 开头的,都将被路由到名称为 “huawei” 的 Queue 上,第三个 Binding 中的 “#.phone.#” 则表示消息的 routingkey 中凡是包含 “phone” 的,都将被路由到名称为 “phone” 的 Queue 上。
第一条消息将被路由到名称为 “xiaomi” 的 Queue 上,第二条消息将被路由到名为 “huawei” 的 Queue 上,第三条消息将被路由到名为 “xiaomi” 以及名为 “phone” 的 Queue 上,第四条消息将被路由到名为 “huawei” 以及名为 “phone” 的 Queue 上,最后一条消息则将被路由到名为 “phone” 的 Queue 上。
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)