ToB企服应用市场:ToB评测及商务社交产业平台

标题: RabbitMQ的Web管理页面给我看懵了,这都什么意思啊 [打印本页]

作者: 张裕    时间: 昨天 14:22
标题: RabbitMQ的Web管理页面给我看懵了,这都什么意思啊
在上一篇文章中我们讲到了如安在Windows中安装Rabbitmq, 小白也能搞定!手把手教你在 Windows 上安装 RabbitMQ我们先安装了Erlang环境,之后又安装了Rabbitmq,末了我们通过安装Rabbitmq的web管理端成功验证了,但是相信大家进入Rabbitmq的管理页面都和作者一样傻眼了,这么多的页签,这都什么意思啊???

所以这次我们来结合代码和页面临应的功能来入门一下Rabbitmq的基础名词和他们的概念。
在说Rabbitmq之前,我们需要了解一下什么是消息队列?
消息队列(Message Queue, MQ)是一种软件设计模式,也是一种中间件技术,它允许应用步伐通过网络进行异步通信。在消息队列中,消息被发送到队列中,吸收端(消耗者)可以从队列中取出这些消息进行处置惩罚。消息队列的设计目的是为了实现异步处置惩罚、解耦服务以及提升系统的可扩展性和坚固性。
消息队列(Message Queue, MQ)是一种应用步伐间的通信方法,它允很多个组件之间通过异步方式传递数据。消息队列的重要目的是解耦系统组件,进步系统的可扩展性和坚固性。在消息队列中,生产者发送消息,消耗者吸收消息,中间件(通常是消息队列服务)负责存储和转发消息。
那他在我们工作中应该怎么用呢?
假设我们正在开发一个电子商务网站,当用户提交订单时,前端向订单服务发送一个请求,订单服务创建订单并将相关信息(比方订单号、商品信息等)放入消息队列。然后,订单服务立刻返回给前端,告诉用户订单已提交。此时,背景的订单处置惩罚服务从消息队列中读取新订单的消息并开始处置惩罚订单,如查抄库存、扣减库存、计算运费等。
这种方式的好处是,订单服务可以立刻相应用户,而无需等待耗时的操作完成,从而进步了用户体验。同时,如果订单处置惩罚服务临时不可用大概处置惩罚速率较慢,也不会影响到用户的即时体验。
好了,这下轻巧明了的先容了一下MQ,那么我们来认识一下Rabbitmq。
RabbitMQ 是一个在分布式系统中实现消息传递的应用步伐,它基于 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)标准。RabbitMQ 由 LShift 和 NetBM 公司在 2007 年开发,并于 2010 年被 Pivotal 软件公司收购。它是用 Erlang 语言编写的,这使得它非常擅长处置惩罚大量的并发毗连。市面上有很多的MQ产物,比方kafka,RocketMQ等,而Rabbitmq也是MQ系列产物中的一个产物。
认识Rabbitmq基础模式:
在最新的版本中Rabbitmq有七种模式

好了,说了这么多,可以先容一下web管理端了
RabbitMQ 的 Web 管理界面提供了丰富的工具来监控和管理 RabbitMQ 服务器的状态和配置。
Overview



Totals

如果我们使用sdk发送一条消息的话:
  1. @Test
  2.     public void testSend() throws Exception {
  3.         //创建连接工厂
  4.         ConnectionFactory connectionFactory = new ConnectionFactory();
  5.         //设置主机
  6.         connectionFactory.setHost("127.0.0.1");
  7.         //设置端口
  8.         connectionFactory.setPort(5672);
  9.         //设置连接的虚拟主机
  10.         connectionFactory.setVirtualHost("/local");
  11.         //设置用户名和密码
  12.         connectionFactory.setUsername("guest");
  13.         connectionFactory.setPassword("guest");
  14.         //获取连接对象
  15.         Connection connection = connectionFactory.newConnection();
  16.         //获取连接通道
  17.         Channel channel = connection.createChannel();
  18.         //通道绑定消息队列
  19.         channel.queueDeclare("test-send", false, false, false, null);
  20.         //发部消息
  21.         channel.basicPublish("", "test-send", null, "hello rabbitmq".getBytes());
  22.         channel.close();
  23.         connection.close();
  24.     }
复制代码
我们就会在Totals下的Message rates和Queued messages的仪表盘中看到一条曲线。

Message Rates

消息的发送速率(publish rate)和消耗速率(deliver rate),帮助管理员了解当前系统的消息吞吐量,并评估系统的性能和负载环境。

Queued Messages

当前队列中等待处置惩罚的消息总数,帮助管理员了解队列中积压的消息量,并判定系统是否存在消息积压题目及积压程度。

这个页面下背面的配置项就不做过多先容,包括:

Nodes


Churn Statistics


Ports and Contexts


Export Definitions


Import Definitions


Connections


我们把上面发送消息的代码改造一下,让他在关闭之火线程睡一下,我们就可以发现有一个Connection毗连:
  1. @Test
  2.     public void testSend() throws Exception {
  3.         //创建连接工厂
  4.         ConnectionFactory connectionFactory = new ConnectionFactory();
  5.         //设置主机
  6.         connectionFactory.setHost("127.0.0.1");
  7.         //设置端口
  8.         connectionFactory.setPort(5672);
  9.         //设置连接的虚拟主机
  10.         connectionFactory.setVirtualHost("/local");
  11.         //设置用户名和密码
  12.         connectionFactory.setUsername("guest");
  13.         connectionFactory.setPassword("guest");
  14.         //获取连接对象
  15.         Connection connection = connectionFactory.newConnection();
  16.         //获取连接通道
  17.         Channel channel = connection.createChannel();
  18.         //通道绑定消息队列
  19.         channel.queueDeclare("test-send", false, false, false, null);
  20.         //发部消息
  21.         channel.basicPublish("", "test-send", null, "hello rabbitmq".getBytes());
  22.         Thread.sleep(100000);
  23.         channel.close();
  24.         connection.close();
  25.     }
复制代码

所以这里重要的代码就是这里:
  1.    //获取连接对象
  2.         Connection connection = connectionFactory.newConnection();
复制代码
通过这个我们就可以在管理端看到对应的毗连了
name的tab点击进来后就可以看到我们毗连的详细信息了:

包含了一个毗连的详细信息,包括毗连名称、数据传输速率、毗连细节、通道列表和客户端属性
Channels



而这里就是因为上面的这行代码:
  1.         //获取连接通道
  2.         Channel channel = connection.createChannel();
复制代码
点击Channel的tab标签也可以看到详细信息

包含了某个特定通道的详细信息,包括消息速率、通道状态、未确认的消息数、消耗者数量和高级运行时指标。
在 RabbitMQ 中,毗连(Connection)和通道(Channel)之间存在着密切的关系。毗连是客户端与 RabbitMQ 服务器之间的物理通信路径,而通道是在毗连之上建立的逻辑信道,用于执行各种操作,如发布消息、订阅队列等。
一个毗连可以同时打开多个通道,每个通道都有自己的生命周期,独立于其他通道。多个通道共享同一个毗连的资源,如心跳检测和认证信息。差别通道之间的操作相互隔离,不会互相影响。
Exchanges


交换机(Exchange)是一个消息分发中心,它吸收生产者发布的消息并根据预设的规则将其转发到适当的队列。

可以看到rabbitmq中默认有七个交换机,他们的作用分别是:

这些交换机在 RabbitMQ 中已经预置好,用户可以直接使用,也可以根据需要创建自己的交换机。
详细什么是交换机,我们说我队列再讲。
Queues



队列,这是MQ最核心的一个机制了,而这也是我们的这一行代码创建的:
  1.         //通道绑定消息队列
  2.         channel.queueDeclare("test-send", false, false, false, null);
复制代码
声明队列
queue – 队列的名称
durable – 如果我们声明一个持久队列,则为 true(队列将在服务器重启后继续存在)
exclusive – 如果我们声明一个独占队列(仅限于此毗连),则为 true。
autoDelete – 如果我们声明一个 autodelete 队列,则为 true(服务器将在不再使用时将其删除)
arguments – 队列的其他属性(构造参数)
而点进name标签我们可以看到下面的信息:

而这个界面也是我们开发过程中最频繁打开的页面了,这里可以看到队列内里的总的消息,没确认的消息,以及队列的环境,等等,比方:

以及Consumers:哪些消耗者毗连到了这个队列。比方我们使用sdk监听这个队列:
  1. package com.masiyi.springbootrabbitmq;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;import java.io.IOException;public class Consumer {    public static void main(String[] args) throws Exception {        //创建毗连工厂        ConnectionFactory connectionFactory = new ConnectionFactory();        //设置主机        connectionFactory.setHost("127.0.0.1");        //设置端口        connectionFactory.setPort(5672);        //设置连接的虚拟主机
  2.         connectionFactory.setVirtualHost("/local");
  3.         //设置用户名和密码        connectionFactory.setUsername("guest");        connectionFactory.setPassword("guest");        //获取连接对象
  4.         Connection connection = connectionFactory.newConnection();
  5.         //获取连接通道
  6.         Channel channel = connection.createChannel();
  7.         //通道绑定消息队列
  8.         channel.queueDeclare("test-send", false, false, false, null);
  9.         channel.basicConsume("test-send", true, new DefaultConsumer(channel) {            /**             * @param body 接受到的消息             */            @Override            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {                System.out.println(new String(body));            }        });        //如果想一直监听就不要关闭通道//        channel.close();//        connection.close();    }}
复制代码
可以看到我们内里的6条消息瞬间就被消耗掉了

而我们的页面也会酿成这样:

我们可以看到消耗者详细的环境

Admin



这块重要表现的是跟账号有关的内容,点击Name的页签,可以看到guest用户详细的信息,可以改权限,设置密码,删除用户啥的

而在下面的添加用户功能则可以添加新的用户

但是大家有没有注意到右上角有一个Virtual host选项,虚拟主机(Virtual Host)是一种逻辑隔离机制,它可以让你在一个 RabbitMQ 实例中同时运行多个独立的应用步伐或服务。虚拟主机允许你将相关联的交换机、队列和绑定组合在一起,形成一个逻辑单元,从而实现多租户环境。每个虚拟主机有自己的权限设置,因此差别虚拟主机内的实体相互隔离,制止相互影响。

而我们在毗连到 RabbitMQ 服务器的客户端时,必须指定要使用的虚拟主机。比方我们的代码在这里就会指定虚拟机
  1.         //设置连接的虚拟主机
  2.         connectionFactory.setVirtualHost("/local");
复制代码
他们之间的关联

在页面上我们都先容完他们的作用了,那么我们看到的东西:Connection、Channel、Virtual Host、Exchange 和 Queue 他们之间的作用和关系是什么样的呢?
emem。。。我相信大家已经听蒙了,下面给大家举一个例子:如果大家熟悉 MySQL 数据库,那么可以将 RabbitMQ 中的 Connection、Channel、Virtual Host、Exchange 和 Queue 类比作以下数据库概念:

至此,我们知道了rabbitmq的web管理端的相关页面的操作,也结合代码讲了rabbitmq的核心名词,相信大家对rabbitmq已经有个概念了。
   


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4