⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 民工哥技术之路 「民工哥技术之路」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前面介绍了 RabbitMQ 基础入门、安装与简单使用、基础配置等相关的知识点,今天我将详细的为大家介绍 RabbitMQ 管理界面相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!

管理界面概览

该页面是RabbitMQ主界面,总共有六个选项卡:

Overview

MQ的概览情况,里面包括集群各个节点的信息、端口映射信息。

connections:

无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况。

channels:

通道,建立连接后,会形成通道,消息的投递获取依赖通道。

Exchanges:

交换机,用来实现消息的路由。

Queues:

队列,即消息队列,消息存放在队列中,等待消费,消费后被移除队列。

Admin:

管理用户。

下面将对各个模块中的子模块进行详细的介绍。

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的基本信息

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 上。

文章目录
  1. 1. 管理界面概览
    1. 1.0.1. Overview
    2. 1.0.2. connections:
    3. 1.0.3. channels:
    4. 1.0.4. Exchanges:
    5. 1.0.5. Queues:
    6. 1.0.6. Admin:
  • 2. Overview 模块
    1. 2.0.1. Node服务节点
    2. 2.0.2. ports端口
    3. 2.0.3. Export definitions和Import definitions
  • 3. Admin模块
    1. 3.0.1. 添加用户
      1. 3.0.1.0.1. 超级管理员(administrator)
      2. 3.0.1.0.2. 监控者(monitoring)
      3. 3.0.1.0.3. 策略制定者(policymaker)
      4. 3.0.1.0.4. 普通管理者(management)
      5. 3.0.1.0.5. 其他
  • 3.0.2. 创建虚拟机Virtual Hosts
  • 4. Connections 连接
  • 5. Channels(通道)
  • 6. Exchanges(交换机)
    1. 6.0.0.0.1. 添加exchange的属性说明:
  • 7. Queues
    1. 7.0.0.0.1. 添加queue属性说明:
  • 8. 实际操作发送消费消息
    1. 8.0.1. Direct
      1. 8.0.1.0.1. 新建direct交换机:
      2. 8.0.1.0.2. 新建普通队列
      3. 8.0.1.0.3. 交换机和队列建立绑定关系
  • 8.0.2. Fanout
  • 8.0.3. Topic