👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
《项目实战(视频)》:从书中学,往事中“练”
《互联网高频面试题》:面朝简历学习,春暖花开
《架构 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 管理界面 相关知识,希望大家能够从中收获多多!如有帮助,请点在看 、转发 支持一波!!!
管理界面概览
该页面是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服务节点
Nodes项,显示的是RabbitMQ的服务节点,目前有一个本地节点,可以有多个服务节点(比如集群的时候)。
ports端口
这里一共有三个端口,其中5672是amqp协议的端口,15672是RabbitMQ的管理工具端口(这就是我们现在操作的),25672是做集群的端口。
如果我们现在的Java程序要与RabbitMQ进行交互,需要和哪个端口交互呢?是5672。因为Java客户端需要与RabbitMQ服务进行数据交互,必须要遵循amqp协议协议,所以要走5672端口。
而15672是RabbitMQ的管理工具的端口,与服务无关,仅仅是管理工具运行的端口。
Export definitions和Import definitions
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)的概念。其实就是一个独立的访问路径,不同用户使用不同路径,各自有自己的队列、交换机,互相不会影响。
创建好虚拟主机,我们还要给用户添加访问权限,点击添加好的虚拟主机:
进入虚拟主机设置界面,给用户设置权限
Connections 连接
在这里可以看客户端连接RabbitMQ服务的信息。目前尚未有客户端连接,所以上面看不到连接信息。
Channels(通道)
在这里可以看客户端连接RabbitMQ通道的信息。通道是建立在连接之上的,因为现在没有连接,所以也没有通道。
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来添加交换机。
添加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。
添加queue属性说明:
Name #queue的名称
Durability #Durable表示持久化,即rabbitmq重启后,不会清除该queue,保留queue
Auto delete#是否自动删除,默认NO。自动删除触发条件:当所有消费客户端连接断开后,会删除该消息队列。
当Queue中的 autoDelete 属性被设置为true时,那么,当所有消息接收者宕机或者关闭连接后,消息队列则会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收最新的消息,而宕机期间的消息则会丢失。
当Quere中的 autoDelete 属性被设置为false时,那么,当消息接收者宕机,关闭后,消息队列不会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收包括宕机期间的消息。
Arguments #其他选项参数,如TTL,Auto expire等,在该选项下面有参数选择。
下面,我创建一个name为myqueue的消息队列,创建完成后,会在queue表格中看到。
创建了exchange和queue之后,我们还需要将queue绑定到exchange。下面我将上面创建的myqueue绑定到exchange上,在queues页面,点击我们需要绑定的队列,进入到详情页,在Add binding to this queue中填入exchange名称和路由键。然后就可以在对应的exchange详情页的bingdings看到绑定信息。
实际操作发送消费消息
Direct
DirectExchange 的路由策略是将消息队列绑定到一个 DirectExchange 上,当一条消息到达 DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为 “queue.test”,则 routingkey 为 “queue.test” 的消息会被该消息队列接收。
新建direct交换机:
新建普通队列
交换机和队列建立绑定关系
点击交换机进行绑定:
点击交换机发送消息:这里我发送了两条
发动成功:
点击队列的消息;
Fanout
FanoutExchange 的数据交换策略是把所有到达 FanoutExchange 的消息转发给所有与它绑定的 Queue 上,在这种策略中,routingkey 将不起任何作用;
新建队列:
新建交换机:
交换机和每个队列帮绑定:
然后给这个交换机发送消息两条消息:我们看到每个队列都收到两条消息;
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 上。
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)