开发知识点-RabbitMQ

在这里插入图片描述

RabbitMQ

  • 下载与介绍
  • 权限了解
  • 消息状态
  • rabbitmqctl命令与操作配置
    • 常见错误
    • 常见问题
    • 日志
  • poc-yaml-rabbitmq-default-password

下载与介绍

RabbitMQ是一个使用Erlang语言开发 开源的消息中间件项目(Message Broker),
采用Mozilla Public License(MPL)开源许可证。这意味着任何人都可以自由获取、使用、修改和分发RabbitMQ的源代码。

实现了高级消息队列协议(AMQP)并提供可靠的、异步的消息传递机制。
可以让你在不同的应用之间传递数据,用来实现分布式系统中的异步通信。
有很多优点,比如可靠性、灵活性、集群性、多协议支持等。

RabbitMQ由Pivotal Software公司进行开发和维护。

开发者可以在RabbitMQ的官方网站上找到相关的文档、示例代码、技术支持和社区讨论等资源,以帮助他们学习和使用RabbitMQ。
同时,由于是开源项目,任何人都可以参与到RabbitMQ的开发和贡献中。

RabbitMQ的主要特点和功能包括:

  1. 消息传递:RabbitMQ使用消息队列和发布/订阅模式来支持消息传递。它允许应用程序通过发送和接收消息来进行异步通信,并且可以确保消息的可靠性、顺序性和持久化。

  2. 多语言支持:RabbitMQ提供了多个编程语言的客户端API,如Java、Python、.NET、Ruby等,使得开发者可以使用自己熟悉的语言与RabbitMQ进行交互。这使得RabbitMQ具有广泛的可扩展性和互操作性。

  3. 消息确认和回退:RabbitMQ支持消息的确认机制,即在消息被消费之后,消费者可以向RabbitMQ发送确认消息。如果消息处理失败,消费者可以将消息退回到队列中,或者将其发送到死信队列。

  4. 路由和交换机:RabbitMQ通过路由和交换机的机制来决定消息的发送和接收方式。它支持不同类型的交换机,如直接交换机、主题交换机和扇出交换机,以满足不同的消息路由需求。

  5. 高可用性和可伸缩性:RabbitMQ支持集群部署和镜像队列,在多台服务器之间实现消息的复制和负载均衡。这使得RabbitMQ具有高可用性和可伸缩性,可以处理高并发和大规模的消息流量。

  6. 插件和扩展性:RabbitMQ提供了丰富的插件和扩展机制,可以实现各种定制化的功能和行为。开发者可以根据具体需求安装和配置插件,以扩展RabbitMQ的功能,如用户认证、消息转换等。

要使用RabbitMQ,你需要安装Erlang语言和RabbitMQ服务端,
然后在你的客户端程序中引入RabbitMQ的客户端库,
比如Java的spring-boot-starter-amqp。
你还需要了解一些RabbitMQ的基本概念,比如交换机、队列、绑定、路由键等

https://www.erlang.org/downloads
https://www.rabbitmq.com/install-windows.html

RabbitMQ中有一个重要的概念:
worker,也就是消费者,它是从队列中获取并处理消息的程序。

权限了解

RabbitMQ的用户角色分类:
none、management、policymaker、monitoring、administrator

RabbitMQ各类角色描述:
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

RabbitMQ用户的主题权限是指用户在发布或消费主题交换器上的消息时,需要满足的路由键的匹配规则 主题权限是在虚拟主机级别设置的,可以使用rabbitmqctl命令或HTTP API来配置
例如,下面的命令给用户tester在虚拟主机test_vhost上设置了主题权限,
只允许他使用以tester-开头的路由键来发布或消费amq.topic交换器上的消息]

sudo rabbitmqctl set_topic_permissions -p /test_vhost tester amq.topic "^tester-.*" "^tester-.*"

消息状态

-   Ready 指的是队列中等待被消费的消息的数量,也就是说,这些消息已经被发布到队列中,但还没有被分配给消费者。
-   Unacked 指的是队列中已经被分配给消费者,但还没有被确认的消息的数量,也就是说,这些消息已经被消费者接收,但还没有被消费者处理完毕或通知队列。
-   Total 指的是队列中所有消息的数量,也就是 ReadyUnacked 的和,也就是说,这些消息包括了等待被消费和正在被消费的两种状态。

rabbitmqctl命令与操作配置

使用rabbitmqctl命令行工具,它可以查询和管理RabbitMQ服务器的状态和配置。
ps:在 Windows 上,rabbitmqctl变为rabbitmqctl.bat并且 shell 转义会有所不同



rabbitmqctl status 来查看 RabbitMQ 的运行状态
使用 REST API 来调用 RabbitMQ 的管理接口
例如,你可以输入 curl -i -u guest:guest http://localhost:15672/api/overview 
来查看 RabbitMQ 的概括信息



停止RabbitMQ应用
rabbitmqctl stop_app






rabbitmqctl reset
来重置RabbitMQ服务器
这样会清除所有的配置和队列,包括worker


rabbitmqctl start_app重新启动RabbitMQ应用。
注意:这种方法相当于重置RabbitMQ,请谨慎操作,可能会导致数据丢失。



 
添加用户
rabbitmqctl add_user 用户名 密码

列出用户
rabbitmqctl list_users
rabbitmqctl start_app
ps:一般只有一个guest用户

检查你的用户或密码是否正确,你可以使用
rabbitmqctl authenticate_user
来验证你的凭证 

检查你的用户是否有足够的权限来连接rabbitmq,
可以使用rabbitmqctl list_permissions --vhost Godhost
来查看你的用户的权限






配置用户角色
rabbitmqctl set_user_tags 用户名 角色
(总共五种角色)



虚拟主机
rabbitmqctl add_vhost {vhost}

rabbitmqctl list_vhosts
rabbitmqctl delete_vhost /



用户标签



用户权限

配置权限
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
您的用户没有足够的权限访问交换机或队列。您可以尝试使用rabbitmqctl命令清除和设置权限,例如:
rabbitmqctl clear_permissions -p Godhost aming 
rabbitmqctl set_permissions -p Godhost aming "." "." ".*"
这样您的用户aming就可以访问Godhost虚拟主机中的任何交换机或队列了。






查看队列中有多少消息

使用AMQP 0-9-1协议,通过queue.declare方法的返回值(queue.declare-ok)中的message_count字段。
使用RabbitMQ HTTP API。


查看队列中的消息数量和状态
rabbitmqctl list_queues
rabbitmqctl list_queues name messages
来查看队列的名称和消息数
可以使用 RabbitMQ 的管理界面来查看队列中的消息内容和人工发送消息内容
点击 queues,然后点击 Get Message(s) 来获取队列中的消息,
或者点击 Publish message 来发送消息




你也可以使用RabbitMQ管理插件,它提供了一个基于Web的用户界面,可以方便地监控和管理RabbitMQ服务器。
你可以在浏览器中访问http://<host>:15672来打开管理界面,
然后在Overview或者Queues页面中查看当前的消费者信息.

rabbitmq-plugins.bat enable rabbitmq_management
http://localhost:15672/,输入默认用户名和密码,都是guest  
在Queues页面中选择任意一个队列,点击名称进入,滑动到最下面,可以看到有个Delete按钮,
点击即可删除该队列
这样会断开该队列上的所有worker的连接。
你需要对每个队列都进行这样的操作,才能清除所有的worker。这种方法比较繁琐,但是不会影响其他的配置和数据。

可以使用RabbitMQ客户端库提供的API,来编写自己的程序来清除所有的worker。
不同的语言和框架可能有不同的API,但一般都会提供一个方法来删除队列或者取消消费者。
例如,在Python中,你可以使用pika库来连接RabbitMQ服务器,
并使用channel.queue_delete方法来删除队列,
或者使用channel.basic_cancel方法来取消消费者。
你需要遍历所有的队列,并对每个队列执行这样的操作,才能清除所有的worker。 













查看当前运行的worker
你可以使用rabbitmqctl命令行工具,它可以查询和管理RabbitMQ服务器的状态和配置。

rabbitmqctl list_consumers
查看当前所有的消费者信息,包括队列名、通道标识、消费者标签等。

使用RabbitMQ客户端库提供的API,来编写自己的程序来查询当前的消费者信息。
不同的语言和框架可能有不同的API,
但一般都会提供一个方法来获取队列的状态或者属性,其中包括消费者数量和消费者标签等信息。

例如,在Java中,你可以使用Channel类的queueDeclarePassive方法来获取一个已存在队列的属性。





rabbitmq.conf
命令行中使用 -l 或 --listen 参数。例如:
如果你想让 rabbitmq 服务器监听所有接口的 5672 端口(默认设置),
你可以在 rabbitmq.conf 文件中写:
listeners.tcp.default = 5672

如果你想让 rabbitmq 服务器监听 192.168.1.99 接口的 5672 端口,
你可以在 rabbitmq.conf 文件中写:
listeners.tcp.1 = 192.168.1.99:5672
如果你想让 rabbitmq 服务器监听多个接口和端口,
你可以在 rabbitmq.conf 文件中写:
listeners.tcp.1 = 192.168.1.99:5672
listeners.tcp.2 = [::1]:5673
如果你想在命令行中指定监听的接口和端口,
你可以使用 -l 或 --listen 参数,例如:
rabbitmq-server -l 192.168.1.99:5672
  

常见错误



用户缓存 替换
C:\Windows\System32\config\systemprofile
C:\Users\amingMM
.erlang.cookie



如果你的计算机名或者用户名是中文的,可能会导致RabbitMQ安装失败 

rabbitmq-service.bat remove
rabbitmq-service.bat install
rabbitmq-service.bat start



常见问题


 rabbitmq queue 中使用的队列状态是 idle 的原因可能有以下几种  

-   队列中没有消息,或者消息的数量很少,没有达到队列的容量限制。
-   队列中没有消费者,或者消费者的数量很少,没有达到队列的并发限制。
-   队列中的消息被设置了 TTL(生存时间),或者被设置了延迟投递,导致消息在一段时间内不可用。
-   队列中的消息被设置了优先级,或者被设置了公平分发,导致消息在一段时间内不被分配给消费者。

要解决这个问题,你可以尝试以下方法:

-   增加队列中的消息数量,或者减少队列的容量限制,让队列更快地达到饱和状态。
-   增加队列中的消费者数量,或者减少队列的并发限制,让队列更快地分配任务给消费者。
-   减少或取消队列中的消息 TTL 或延迟投递,让消息更快地可用。
-   减少或取消队列中的消息优先级或公平分发,让消息更均匀地分配给消费者。



 



amqp.exceptions.AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

 这个错误表明你的应用程序尝试使用的RabbitMQ的凭证是错误或缺失的
 你需要检查你的连接工厂或配置文件中是否提供了正确的用户名和密码,以及是否指定了正确的虚拟主机。
 如果你使用的是guest用户,你需要确保你是从本地主机连接,或者修改RabbitMQ的配置文件允许guest用户从远程主机连接
 你也可以尝试创建一个新的用户并给予相应的权限
 例如,下面的命令会创建一个名为RabbitUser的用户,并给予其在/虚拟主机上的完全访问权限:


rabbitmqctl add_user RabbitUser YOURPASSWORD
rabbitmqctl set_user_tags RabbitUser administrator
rabbitmqctl set_permissions -p / RabbitUser ".*" ".*" ".*"
 

日志


 查看broker日志文件的方法取决于你的rabbitmq的安装方式和配置。
 
 一般来说,你可以在rabbitmq的日志文件中找到broker日志文件的位置 
 可以使用
 rabbitmq-diagnostics -q log_location
 命令来查看节点存储日志文件的位置
 
 如果你使用docker运行rabbitmq,你可以使用docker logs命令来查看标准输出中的日志



rabbitmq-diagnostics tail_log
查看实时的日志输出。


rabbitmq-diagnostics -q log_location
确认你的节点是否真的输出到标准输出流中。



 使用配置文件来设置日志文件的路径
 可以在rabbitmq.conf文件中使用log.file这个键来指定日志文件的位置
 使用环境变量来设置日志文件的路径。
 在安装rabbitmq时设置RABBITMQ_LOGS这个环境变量的值
 在rabbitmq-env.conf或rabbitmq-env-conf.bat文件中设置
  可以使用RABBITMQ_LOGS这个环境变量来指定日志文件的路径 
  例如,你可以在文件中添加这样一行:

RABBITMQ_LOGS=/var/log/rabbitmq/rabbit.log

这样就会把日志输出到/var/log/rabbitmq/rabbit.log这个文件中。你也可以使用其他合法的文件路径 




Windows

 可以在文件管理器中找到日志文件的位置,然后用文本编辑器或其他工具打开它。
 日志文件的位置取决于你安装或启动rabbitmq服务的用户。
 一般来说,日志文件的路径是C:\Users\username\AppData\Roaming\RabbitMQ\log
 

poc-yaml-rabbitmq-default-password

| 348 | rabbitmq_default_passwd | Check the rabbitmq default password vuln

RabbitMQ 未授权访问(15672、15692、25672)
RabbitMQ是目前非常热门的一款消息中间件,基于AMQP协议的,可以在发布者和使用者之间交换异步消息。消息可以是人类可读的JSON,简单字符串或可以转换为JSON字符串的值列表。
默认账号密码都是guest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/312076.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot用MultipartFile.transferTo传递相对路径的问题

问题描述&#xff1a; 打算给自己的项目添加一个上传文件保存功能&#xff0c;于是我使用MultipartFile.transferTo()来完成这个功能&#xff0c;由于我的项目要部署到服务器&#xff0c;所以我使用了相对路径把上传的文件保存到当前项目的工作目录下&#xff0c;但是报错了&am…

如何在 Windows 中使用Copilot AI

Windows Copilot 是 Windows 中的一个新功能&#xff0c;它可以让你与一个智能助理进行对话&#xff0c;获取信息&#xff0c;执行任务&#xff0c;甚至创造内容。Windows Copilot 使用了 Bing Chat 的技术&#xff0c;它是一个基于 OpenAI 的 GPT-4 模型的聊天机器人。 目录 …

关于树结构的数据的权限控制的算法

树结构的权限控制分两种:1、逐层加载&#xff1b;2、一次性加载 一、逐层加载 涉及的表结构 表名 T_PLAN 表字段 字段类型 是否必 须字段 说明 ID VARCHAR2(50) Y 主键 PARENT_ID VARCHAR2(50) Y 父项节点ID&#xff0c;默认根节点的父节点ID’-1’ TREEPATH VA…

vue3的福音框架arco.design

前言&#xff1a; 在vue2于2023年底正式宣布不在维护&#xff0c;vue3使用越来越频繁的时刻&#xff0c;我们实现项目的辅助框架也越来越多。element, iview, antd 等经典框架继续风靡一时&#xff0c;不过也有很多好的框架&#xff0c;功能也强大&#xff0c;比如我们今天说的…

ISO 11519-2 开环低速 CAN 网络(10K~125Kbps)

ISO 11519-2 标准的物理框图如下图 可理解为一个低速开环 CAN 总线网络&#xff1b;CAN 开环总线网络允许总线最大长度为 1km;最高速度为 125Kbps;这里的两根线是独立的&#xff0c;每根线上串联一个 2.2kΩ 的电阻&#xff1b;节点就是不同的设备&#xff0c;连接到一个开环总…

Mac上使用phpstudy+vscode配置PHP开发环境

使用的工具&#xff1a; 1、系统版本 2、vs code code 3、phpstudy_pro 一、下载vs code code以及必要的插件 1、vs code下载 点击vs code官网下载 选择对应的版本&#xff0c;一般电脑会自动识别对应的版本&#xff0c;点击下载&#xff0c;然后傻瓜式安装&#xff01; 2…

万字长文 详细讲述 计算机网络层

文章目录 网络层网络层的几个重要概念网络层的两个层面 网际协议 IP虚拟互连网络IP 地址IP 地址及其表示方法IP 地址与 MAC 地址地址解析协议 ARPIP 数据报的格式 IP层转发分组过程基于终点的转发最长前缀匹配 网际控制报文协议 ICMPICMP 报文的种类ICMP 的应用举例IPv6 的基本…

Leetcode 494 目标和

题意理解&#xff1a; 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添…

js更新地址栏,但是不刷新页面

记录一下第一次遇到更新地址栏但是不刷新页面的需求 有时候会遇到一些需求&#xff0c;比如复制地址&#xff0c;分享给别人 希望也保留筛选条件&#xff0c;但是之前做的时候筛选条件存储到的状态管理工具里面了&#xff0c;地址栏没有&#xff0c;所以为了更快的实现效果&am…

如何下载“ubuntu”在win10系统?

一、下载 企业开源和 Linux |Ubuntu的

解决jenkins需要jdk11,项目需要jdk8的问题

思路&#xff1a;jdk8 采用解压缩模式&#xff0c;jdk11采用安装模式&#xff0c;然后在jenkins中指定jdk路径 下载解压缩jdk8 https://www.oracle.com/java/technologies/downloads/#java8 解压缩&#xff1a;jdk-8u391-linux-i586.tar.gz /lib/ld-linux.so.2: bad ELF inte…

Realm Management Extension领域管理扩展之颗粒保护检查

本节描述了RME引入的颗粒保护检查。颗粒保护检查使得能够在不同的物理地址空间之间动态分配内存区域。 本节将向您介绍以下功能: 颗粒保护表的结构用于颗粒保护检查的故障报告区域在物理地址空间之间的过渡正如在物理地址一节中所述,RME提供了四个物理地址空间。以下图表显示…

搭建 MyBatis 环境

目录 1.添加依赖 2.数据库连接配置 3.配置XML路径 4.下载插件MyBatisX 5.如何使用 6.示例 1.添加依赖 创建新项目时添加两个依赖: MyBatis Framewrok 和 MySQL Driver 。 如果是在已经创建好的项目中配置mybatis环境。需要先下载一个插件&#xff1a;EditStarters 。 然…

JavaScript复习小案例

JavaScript实现简易留言板 效果图 完整代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>留言板</title><style>body {background-color: #f4f4f4;}/* 外部容器样式设置 */.wrapper {width: 400px;heigh…

探索 TCP 与 UDP:网络通信的两门学派(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?

<el-tree-selectv-model"form.topmneu":data"tableData":props"{ label: title, value: id }":render-after-expand"false"style"width: 100%"check-strictly/> 添加 :props "{ lable : 字段名 , value: 字段…

Java并发之同步二:Java并发工具类

一、CountDownLatch &#xff08;1等多汇总、多等1 开关&#xff09; countdownlatch 底层原理&#xff0c;定义锁资源&#xff1a;0&#xff0c;当资源为0才叫拿到锁&#xff0c;所以countdownlatch也叫做倒数器&#xff0c;拿锁的时候判断是不是0&#xff0c;不是就park&…

NumPy 数据操作实用指南:从基础到高效(下)

文章接上篇&#xff1a; In [53]: from PIL import Image In [60]: dog Image.open(./dog.jpg) dog . . . In [61]: dog_datanp.array(dog) # 图片数据是ndarray # 彩色照片三维&#xff1a;高度&#xff0c;宽度&#xff0c;像素&#xff08;表示不同颜色&#xff09;&…

雪花代码-html版

雪花代码 动画效果 代码 <!DOCTYPE html><html><head><style>body {background-color: #000000;}.snowflake {position: absolute;font-size: 10px;color: #FFFFFF;text-shadow: 1px 1px 1px #000000;user-select: none;}</style></head>…

008-关于FPGA/ZYNQ直接处理图像传感器数据输出的若干笔记(裸板采集思路)

文章目录 前言一、图像传感器厂商二、图像传感器的参数解析三、图像传感器中的全局曝光和卷帘曝光四、处理传感器图像数据流程1.研究当前图像传感器输出格式2.FPGA处理图像数据 总结 前言 最近也是未来需要考虑做的一件事情是&#xff0c;如何通过FPGA/ZYNQ去做显微镜图像观测…