开发知识点-RabbitMQ

这篇具有很好参考价值的文章主要介绍了开发知识点-RabbitMQ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发知识点-RabbitMQ,rabbitmq,ruby,分布式

下载与介绍

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文章来源地址https://www.toymoban.com/news/detail-783147.html

到了这里,关于开发知识点-RabbitMQ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 206、SpringBoot 整合 RabbitMQ 的自动配置类 和 对应的属性处理类 的知识点

    ▲ Spring Boot 提供了一个 spring-boot-starter-amqp 的Starter来支持RabbitMQ,只要添加该Starter,它就会添加 spring-rabbit 依赖库(它有传递依赖了amqp-client.jar) ▲ 只要类加载路径下包含了 spring-rabbit 依赖库, Spring Boot 会自动配置 CachingConnectionFactory (CachingConnectionFactory:带缓存的连接工

    2024年02月07日
    浏览(42)
  • 分布式高级知识点

    Paxos 是一种分布式一致性算法,用于在分布式系统中达成共识。它可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。 Paxos 算法的基本思想是,首先选出一个协调者(leader)。协调者负责向其他节点发送提案(proposal)。其他节点收到提案后,会对其进行

    2024年02月03日
    浏览(53)
  • 存储、计算、分布式知识点思维导图(收集整理适合小白)

    IO技术 FC协议 光纤通道协议,为了解决I/O传输瓶颈对于整个存储系统带来的消极影响从而产生的光纤通道标准协议簇 iSCSI技术 一种专门为小型计算机系统设计的I/O技术又被成为小型计算机系统接口,通过网络由专门的服务器提供存储管理,已实现数据的远程存储,便于集中管

    2024年03月11日
    浏览(61)
  • 深度解析Redisson框架的分布式锁运行原理与高级知识点

    分布式系统中的锁管理一直是一个复杂而关键的问 题。在这个领域,Redisson框架凭借其出色的性能和功能成为了开发者的首选之一。本篇博客将深入探讨Redisson框架的分布式锁运行原理以及涉及的高级知识点。通过详细的解释和示例代码,您将更好地理解如何在分布式环境中

    2024年02月09日
    浏览(47)
  • springboot第54集:思维导图后端知识点微服务分布式架构周刊

    InnoDB和Myisam是MySQL数据库中两种非常流行的存储引擎,主要存在四大区别: 事务支持能力不同:InnoDB支持ACID事务。所以可以处理高级别的数据完整性和可靠性。而MyISAM不支持事务,所以MyISAM在处理需要高度数据完整性的操作时不如InnoDB可靠。 锁定机制不同:InnoDB使用行级别

    2024年02月20日
    浏览(47)
  • 网络开发过程详细知识点

     网络生命周期 至少包括系统构思与计划、分析和设计、运行和维护的过程。  常见的迭代周期分为四阶段周期、五阶段周期、六阶段周期。   网络开发过程根据五阶段迭代周期模型可被分为 五个阶段:    需求分析、现有网络分析、确定网络逻辑结构、确定网络物理结构

    2024年02月07日
    浏览(38)
  • unity开发知识点小结02

    虚拟轴就是一个数值在-1 1内的轴,这个数轴上重要的数值就是-1,0和1。当使用按键模拟一个完整的虚拟轴时需要用到两个按键,即将按键1设置为负轴按键,按键2设置为正轴按键。在没有按下任何按键的时候,虚拟轴的数值为0;在按下按键1的时候,虚拟轴的数值会从0 -1进行

    2024年02月07日
    浏览(48)
  • 知识点19--springboot多模块开发

    本篇向大家介绍本系列demo教程中最后一个知识点就是多模块开发,多模块听着高大上,其实就是依靠maven相互之间的依赖,把多个模块融合进一个项目中而已,说的再直白一些就是像日常开发那样把其他模块导入一个模块,这个模块用来启动并调用所有模块而已。下面通过一

    2024年02月06日
    浏览(47)
  • WPF快速开发(2):图标库知识点

    图标资源下载 iconfont Window.Resources:资源位置声明 X:Key:资源Id,用于前端的xaml X:Name:控件Id,用于后端的程序标记 简单样例 Setter:属性 用于设置控件属性 可以直接写,也可以在Style.Setters里面写 使用属性使用Style=“{StaticResource 样式名}” 继承关系 一个控件只能有一个Style

    2024年02月15日
    浏览(50)
  • WPF快速开发(1):静态计算器知识点补充

    本篇章主要介绍如何使用布局元素和简单控件 WPF是一个MVVM框架 是一个只能运行在Windows平台上的程序 WPF的后继者:UWP,MAUI等能进行跨平台。 WPF是断代更新: 官方不会再发布新的版本,而是启用其他的全新框架。 第三方库还是在持续更新 优点: 第三方库不需要考虑版本适

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包