首页 > 其他分享 >rabbitmq学习-架构以及web访问

rabbitmq学习-架构以及web访问

时间:2023-09-22 12:01:37浏览次数:40  
标签:web 架构 队列 rabbitmq Queue 生产者 交换机 消息 RabbitMQ

架构

rabbitmq学习-架构以及web访问_用户名

  • 生产者(Publisher):发布消息到 RabbitMQ 中的交换机(Exchange)上。
  • 交换机(Exchange):和生产者建立连接并接收生产者的消息。
  • 消费者(Consumer):监听 RabbitMQ 中的 Queue 中的消息。
  • 队列(Queue):Exchange 将消息分发到指定的 Queue,Queue 和消费者进行交互。
  • 路由(Routes):交换机转发消息到队列的规则。

在 RabbitMQ 中,所有的消息生产者提交的消息都会交由 Exchange 进行再分配,Exchange 会根据不同的策略将消息分发到不同的 Queue 中。这里主要展示的是当前连接上 RabbitMQ 的信息,无论是消息生产者还是消息消费者,只要连接上来了这里都会显示出来。

常用的消息分发形式

官网提供如下几种消息分发模式


rabbitmq学习-架构以及web访问_消息队列_02

rabbitmq学习-架构以及web访问_用户名_03

Hello World

这个其实是默认的交换机,我们需要提供一个生产者一个队列以及一个消费者。消息传播图如下:

rabbitmq学习-架构以及web访问_消息队列_04

这个时候使用的其实是默认的直连交换机(DirectExchange),DirectExchange 的路由策略是将消息队列绑定到一个 DirectExchange 上,当一条消息到达 DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为 “hello-queue”,则 routingkey 为 “hello-queue” 的消息会被该消息队列接收。

Work queues

这种情况是这样的:

一个生产者,一个默认的交换机(DirectExchange),一个队列,两个消费者,如下图:

rabbitmq学习-架构以及web访问_用户名_05

一个队列对应了多个消费者,默认情况下,由队列对消息进行平均分配,消息会被分到不同的消费者手中。消费者可以配置各自的并发能力,进而提高消息的消费能力,也可以配置手动 ack,来决定是否要消费某一条消息。


Publish/Subscribe

发布订阅模式

一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,生产者发送的消息经过交换机,到达队列,实现一个消息被多个消费者获取的目的。需要注意的是,如果将消息发送到一个没有队列绑定的 Exchange上面,那么该消息将会丢失,这是因为在 RabbitMQ 中 Exchange 不具备存储消息的能力,只有队列具备存储消息的能力,如下图:

rabbitmq学习-架构以及web访问_用户名_06

这种情况下,我们有四种交换机可供选择,分别是:

  • Direct
  • Fanout
  • Topic
  • Header

DirectExchange 的路由策略是将消息队列绑定到一个 DirectExchange 上,当一条消息到达 DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为 “hello-queue”,则 routingkey 为 “hello-queue” 的消息会被该消息队列接收。

Fanout

FanoutExchange 的数据交换策略是把所有到达 FanoutExchange 的消息转发给所有与它绑定的 Queue 上,在这种策略中,routingkey 将不起任何作用。

Topic

TopicExchange 是比较复杂但是也比较灵活的一种路由策略,在 TopicExchange 中,Queue 通过 routingkey 绑定到 TopicExchange 上,当消息到达 TopicExchange 后,TopicExchange 根据消息的 routingkey 将消息路由到一个或者多个 Queue 上。

Header

HeadersExchange 是一种使用较少的路由策略,HeadersExchange 会根据消息的 Header 将消息路由到不同的 Queue 上,这种策略也和 routingkey无关

Routing

一个生产者,一个交换机,两个队列,两个消费者,生产者在创建 Exchange 后,根据 RoutingKey 去绑定相应的队列,并且在发送消息时,指定消息的具体 RoutingKey 即可。

rabbitmq学习-架构以及web访问_消息分发_07

opics

这种情况是这样: 一个生产者,一个交换机,两个队列,两个消费者,生产者创建 Topic 的 Exchange 并且绑定到队列中,这次绑定可以通过 * 和 # 关键字,对指定 RoutingKey 内容,编写时注意格式 xxx.xxx.xxx 去编写。

rabbitmq学习-架构以及web访问_消息分发_08

WEB常见操作

rabbitmq学习-架构以及web访问_消息队列_09

  1. Overview:这里可以概览 RabbitMQ 的整体情况,如果是集群,也可以查看集群中各个节点的情况。包括 RabbitMQ 的端口映射信息等,都可以在这个选项卡中查看。
  2. Connections:这个选项卡中是连接上 RabbitMQ 的生产者和消费者的情况。
  3. Channels:这里展示的是“通道”信息,关于“通道”和“连接”的关系,松哥在后文再和大家详细介绍。
  4. Exchange:这里展示所有的交换机信息。
  5. Queue:这里展示所有的队列信息。
  6. Admin:这里展示所有的用户信息。

右上角是页面刷新的时间,默认是 5 秒刷新一次,展示的是所有的 Virtual host。

Overview

rabbitmq学习-架构以及web访问_消息队列_10

Totals:

Totals 里面有 准备消费的消息数、待确认的消息数、消息总数以及消息的各种处理速率(发送速率、确认速率、写入硬盘速率等等)。

rabbitmq学习-架构以及web访问_消息队列_11

Nodes:

Nodes 其实就是支撑 RabbitMQ 运行的一些机器,相当于集群的节点。

rabbitmq学习-架构以及web访问_消息队列_12

Ports and contexts:

rabbitmq学习-架构以及web访问_消息分发_13

Connections

rabbitmq学习-架构以及web访问_消息分发_14

注意协议中的 AMQP 0-9-1 指的是 AMQP 协议的版本号。

其他属性含义如下:

  • User name:当前连接使用的用户名。
  • State:当前连接的状态,running 表示运行中;idle 表示空闲。
  • SSL/TLS:表示是否使用 ssl 进行连接。
  • Channels:当前连接创建的通道总数。
  • From client:每秒发出的数据包。
  • To client:每秒收到的数据包。

点击连接名称可以查看每一个连接的详情。

在详情中可以查看每一个连接的通道数以及其他详细信息,也可以强制关闭一个连接。

channels

这个地方展示的是通道的信息:

rabbitmq学习-架构以及web访问_消息分发_15

通道的概念

一个连接(IP)可以有多个通道,如上图,一共是两个连接,但是一共有 12 个通道。

一个连接可以有多个通道,这个多个通道通过多线程实现,一般情况下,我们在通道中创建队列、交换机等。

生产者的通道一般会立马关闭;消费者是一直监听的,通道几乎是会一直存在。

上面各项参数含义分别如下:

  • 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 消息的速率。

Exchange

展示交换机信息

rabbitmq学习-架构以及web访问_消息队列_16

这里会展示交换机的各种信息。

Type 表示交换机的类型。

Features 有两个取值 D 和 I。

D 表示交换机持久化,将交换机的属性在服务器内部保存,当 MQ 的服务器发生意外或关闭之后,重启 RabbitMQ 时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。

I 表示这个交换机不可以被消息生产者用来推送消息,仅用来进行交换机和交换机之间的绑定。

Message rate in 表示消息进入的速率。 Message rate out 表示消息出去的速率。

Queue

rabbitmq学习-架构以及web访问_用户名_17

各项含义如下:

  • Name:表示消息队列名称。
  • Type:表示消息队列的类型,除了上图的 classic,另外还有一种消息类型是 Quorum
  • Features:表示消息队列的特性,D 表示消息队列持久化。
  • State:表示当前队列的状态,running 表示运行中;idle 表示空闲。
  • Ready:表示待消费的消息总数。
  • Unacked:表示待应答的消息总数。
  • Total:表示消息总数 Ready+Unacked。
  • incoming:表示消息进入的速率。
  • deliver/get:表示获取消息的速率。
  • ack:表示消息应答的速率。

Admin

rabbitmq学习-架构以及web访问_用户名_18

各项属性含义如下:

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


标签:web,架构,队列,rabbitmq,Queue,生产者,交换机,消息,RabbitMQ
From: https://blog.51cto.com/u_11555417/7563509

相关文章

  • 基于Java web的动力租车管理系统的设计与实现-计算机毕业设计源码+LW文档
    DESIGNANDIMPLEMENTATIONOFPOWERCARRENTALMANAGEMENTSYSTEMBASEDONJAVAWEB ABSTRACTWiththerapiddevelopmentofInternettechnology,thecurrentlifestyleofpeoplehasundergonetremendouschanges.Especiallyundertheinfluenceofthesharing......
  • webman:自动加载(v1.5.7)
    一,官方文档地址:https://www.workerman.net/doc/webman/others/autoload.html二,实际操作1,设置目录:在项目根目录下新建目录extend:修改composer.json增加以下代码:"psr-0":{    "":"extend/"}如图:执行dumpautoloadliuhongdi@lhdpc:/data/webman/image......
  • Docker上运行RabbitMQ,无法访问管理页面
    在CentOS7中的Docker安装并运行了RabbitMQ,但是在访问管理页面http://IP:15672/却提示拒绝访问这是因为在Docker上运行的RabbitMQ,默认情况下是没有启用管理插件和管理页面的使用命令dockerexec-it容器名/bin/bash进入RabbitMQ容器的命令行终端。容器名即CONTAINERID......
  • 用javaweb技术设计一个网页需要什么软件
    对于使用JavaWeb技术设计一个网页,需要准备以下软件:JavaDevelopmentKit(JDK):这是Java开发的基本工具包,包括Java编译器、运行时环境和其他工具。IDE(集成开发环境):常见的JavaWeb开发IDE包括Eclipse、IntelliJIDEA和NetBeans。这些IDE提供了代码编辑、调试和部署等功能,使开发......
  • MySQL主从原理及常见架构介绍
    主从概述MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群架构的基础。它通过将一台主机的数据复制到其他一台或者多台主机上,并重新应用日志(relaylog)中的SQL语句来实现复制功能。MySQL支持单向、双向、链式级联、异步复制,5.5版本之后加入的半同步复制,5.6版本之后......
  • 如何实现web在线编辑微软office(xls,word)?
    很多人知道,在web浏览器中是无法直接预览Excel、world文档等文件的,让开发者很头疼。谷歌Chrome经过开发团队不断优化,凭借运行界面简单,打开速度最快及扩展插件众多,Chrome已经成为了世界上最受欢迎的浏览器。不过有一点非常可惜,由于微软Office不是开源程序,所以Chrome一直无法直接打......
  • 服务网格化Service mesh 学习01 架构发展历史
    一、架构发展历史......
  • 系统架构设计师的能力要求
    系统架构设计师是负责规划、设计和指导复杂软件系统或信息技术解决方案的专业人员。他们需要具备广泛的技术知识和技能,以确保系统能够满足业务需求并在性能、可伸缩性、安全性和可维护性方面表现出色。以下是系统架构设计师的主要能力要求:技术专业知识:对各种编程语言、开发框架和技......
  • 如何修改vue-cli3预设的terser-webpack-plugin?
    要修改VueCLI3预设的terser-webpack-plugin插件配置,您可以使用VueCLI提供的配置文件和插件配置选项。以下是一些步骤来实现这个目标:创建配置文件:在您的VueCLI3项目根目录下,可以创建一个名为vue.config.js的文件,如果项目中还没有这个文件。这个文件将用于配置webpack......
  • 架构质量
    1.如何保证架构的质量:稳定性、健壮性(1).系统稳定性:定义:a.当一个实际的系统处于一个平衡的状态时,如果受到外来作用的影响时,系统经过一个过渡过程仍然能够回到原来的平衡状态.b.可以说这个系统是稳定的,否则系统不稳定c.如一根绳子绑着小球,处于垂直状态,当受到外力作......