首页 > 其他分享 >RabbitMQ消息队列

RabbitMQ消息队列

时间:2024-08-14 16:22:41浏览次数:7  
标签:虚拟主机 队列 rabbitmq RabbitMQ ## rabbitmqctl 消息 权限 节点

一:RabbitMQ介绍

RabbitMQ是一款在全球范围内使用非常广泛的开源消息队列中间件。它轻量级、易部署、并支持多种协议。它基于Erlang开发,天生拥有高并发的能力。

1:RabbitMQ相关术语

(1)生产者

产生消息的进程或服务

(2)消费者

接收消息的进程或服务

(3)队列

RabbitMQ是消息队列中间件,而真正储存消息数据的就是队列,队列可以有很多。

(4)交换器

类似于网络设备交换机,它可以根据不同的关键字,将消息发送到不同的队列。

(5)虚拟主机

虚拟主机类似于Apache的虚拟主机,如果没有虚拟主机,当RabbitMQ中的数据越来越庞大,队列越来越多,随之而来的是令人头痛的管理问题,比如队列、交换器命名冲突,它们相互影响等等。虚拟主机能够解决这些问题,而不需要我们部署多个RabbitMQ来负责不同的业务。

虚拟主机提供了资源的逻辑分组和分隔,每一个虚拟主机本质上是mini版的RabbitMQ服务器,他们有用自己的连接、队列、绑定、交换器,更重要的是有用自己的权限机制,这有点类似服务器和运行在服务器上的虚拟机一样。

rabbitmq常用命令

1:虚拟机管理

[root@localhost ~]# rabbitmqctl list_vhosts   ##列出所有的虚拟主机

[root@localhost ~]# rabbitmqctl add_vhost fll  ##创建名字叫fll的虚拟主机

[root@localhost ~]# rabbitmqctl delete_vhost fll ##删除名字叫fll的虚拟主机

rabbitmqctl add_vhost <虚拟主机名字> #创建虚拟主机

rabbitmqctl delete_vhost <虚拟主机名字> #删除虚拟主机

2:用户管理

[root@localhost ~]# rabbitmqctl add_user user1 user1_passwd

##创建user1用户,密码为user1_passwd

[root@localhost ~]# rabbitmqctl list_users ##列出所有用户

[root@localhost ~]# rabbitmqctl change_password user1 new_passwd

##更改user1的密码为new_passwd

[root@localhost ~]# rabbitmqctl delete_user user1 #删除user1用户

rabbitmqctl list_users #列出用户

rabbitmqctl add_user <username> <password> #创建用户

rabbitmqctl change_password <username> <password> ##更改用户密码

rabbitmqctl delete_user <username> #删除用户

rabbitmqctl clear_password <username> #清除用户密码

3:tags角色介绍

(1) 超级管理员(administrator):guest

可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

(2) 监控者(monitoring)

可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

(3) 策略制定者(policymaker)

可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。

(4) 普通管理者(management)

仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

(5) 其他

无法登陆管理控制台,通常就是普通的生产者和消费者。

[root@localhost ~]# rabbitmqctl set_user_tags user1 managemnet  

##赋予user1用户management角色

[root@localhost ~]# rabbitmqctl set_user_tags user2 monitoring management

##同时赋予多个角色

[root@localhost ~]# rabbitmqctl set_permissions -p fll user1 '.*' '.*' '.*'

##针对fll虚拟主机给user1用户设置所有的配置、读写queue和exchange的权限。默认是没有任何权限的

rabbitmqctl set_user_tags <username> <rolename>  #赋予用户某个角色

rabbitmqctl set_permissions -p <vhostname> <username> <conf> <write> <read>

 #给用户设置权限

说明:用户权限指的是用户对exchange(交换器),queue(队列)的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。

[root@localhost ~]# rabbitmqctl list_user_permissions user1 ##列出user1的权限

[root@localhost ~]# rabbitmqctl list_permissions -p fll ##列出fll下的所有用户权限

[root@localhost ~]# rabbitmqctl clear_permissions -p fll user2

##清除user2在fll上的权限

rabbitmqctl list_user_permissions <username>

#列出某用户的权限,即该用户对哪个虚拟主机有权限

rabbitmqctl list_permissions -p <vhostname>

#列出指定虚拟主机下所有用户的权限,即哪些用户对该虚拟主机有权限

rabbitmqctl clear_permissions -p <vhostname> <user>

#清除某用户在指定虚拟机上的授权

4:插件管理

rabbitmq-plugins list   ##获取RabbitMQ插件列表

rabbitmq-plugins enable <插件名字> ##安装RabbitMQ插件

rabbitmq-plugins disable <插件名字> ##卸载某个插件

5:限制

rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": 256}'

#设置虚拟主机的最大连接数

rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": 0}'

#不允许客户端连接虚拟主机

rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": -1}'

#不限制连接数

rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": 1024}'

#限制虚拟主机里最大的队列数

rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": -1}'

#不限制队列数

6:其他

rabbitmqctl list_exchanges

#列出所有的交换器

rabbitmqctl list_bindings

#列出所有的绑定,即把exchange和queue按照路由规则绑定起来

rabbitmqctl list_queues

 #分别查看当前系统种存在的Exchange和Exchange上绑定的Queue信息。

rabbitmqctl status  

#查看运行信息

五:RabbitMQ集群

RabbitMQ本身是基于Erlang编写的,Erlang天生支持分布式(通过同步Erlang集群各节点的cookie来实现),因此不需要像Kafka那样通过ZooKeeper来实现分布式集群。

1:元数据

RabbitMQ内部有各种基础构件,包括队列、交换器、绑定、虚拟主机等,他们组成了AMQP协议消息通信的基础,而这些构件以元数据的形式存在

2:内存节点与磁盘节点

在集群中的每个节点,要么是内存节点,要么是磁盘节点,如果是内存节点,会将所有的元数据信息仅存储到内存中,而磁盘节点则不仅会将所有元数据存储到内存上, 还会将其持久化到磁盘。所以在搭建集群的时候,为了保证数据的安全性和性能,最好是两种节点都要有

3:规划

主机名

Ip

节点类型

centos01

192.168.10.101

磁盘节点

Centos02

192.168.10.102

内存节点

Centos03

192.168.10.103

内存节点

4:部署集群

(1)配置hosts以及hostname

三台机器设置hostname

hostnamectl set-hostname centos01

hostnamectl set-hostname centos02

hostnamectl set-hostname centos03

三台机器上都需要编辑如下hosts

192.168.10.101 centos01

192.168.10.102 centos02

192.168.10.103 centos03

(2)关闭selinux以及firewalld

三台机器都要执行

setenforce 0

systemctl stop firewalld

(3)安装rabbitmq

三台机器都要安装,步骤参考上面

(4)启动服务

三台机器都启动起来

systemctl start rabbitmq-server

(5)安装management插件

三台机器都要开启

rabbitmq-plugins enable rabbitmq_management

(6)编辑cookie文件

vim  /var/lib/rabbitmq/.erlang.cookie  #将三台机器的该文件内容编辑为一致

cat /var/lib/rabbitmq/.erlang.cookie

在centos01上操作(其实任何一个上都可以),

可以先将02,03上的cookie删除,然后再同步

rsync -av /var/lib/rabbitmq/.erlang.cookie cenos02:/var/lib/rabbitmq/.erlang.cookie

rsync -av /var/lib/rabbitmq/.erlang.cookie cenos03:/var/lib/rabbitmq/.erlang.cookie

(7)分配节点

centos01为磁盘节点,centos02和centos03为内存节点

centos02和centos03上都执行:

停止rabbitmq

systemctl start rabbitmq-server

rabbitmqctl stop_app  

将centos02作为内存节点连接到centos01

rabbitmqctl join_cluster --ram rabbit@centos01

开启rabbitmq

rabbitmqctl start_app

查看集群状态

rabbitmqctl cluster_status

标签:虚拟主机,队列,rabbitmq,RabbitMQ,##,rabbitmqctl,消息,权限,节点
From: https://blog.csdn.net/2301_77871499/article/details/141194411

相关文章

  • 抖音私信消息接入客服系统
    抖音是当今社交媒体中最受欢迎的应用之一,已经吸引了数百万用户。近年来,许多公司开始在抖音上开展营销活动,以吸引更多的用户。与此同时,他们也在收到越来越多的抖音私信。在应对这种情况时,许多公司都面临一个问题:如何更有效地处理这些私信。这就是为什么抖音私信消息接入客服系统变......
  • 代码随想录day29 || 134 加油站,135 分糖果,860 柠檬水找零,406 根据身高重建队列
    加油站funccanCompleteCircuit(gas[]int,cost[]int)int{ //思路,首先统计一个差值数组,表示行驶到下一个加油站可以补充的油量,然后加总差值数组, //如果小于0,表示从起始位置到目前为止剩余油量小于0,不足以跑完全程,同时将起始位置放到遍历的下一个位置 iflen(gas)==0......
  • .NET 8 中利用 MediatR 实现高效消息传递
    前言MediatR是.NET下的一个实现消息传递的库,轻量级、简洁高效,用于实现进程内的消息传递机制。它基于中介者设计模式,支持请求/响应、命令、查询、通知和事件等多种消息传递模式。通过泛型支持,MediatR可以智能地调度不同类型的消息,非常适合用于领域事件处理。在本文中,将通过一......
  • 高级工程师面试大全- 消息中间件篇
    1.rabbitMQ1.1使用RabbitMQ有什么好处?1、解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!2、异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度3、削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连......
  • centos7 安装docker 并运行es、rabbitmq 服务 记录
    部署docker当执行 yuminstall-ydocker-cedocker-ce-clicontainerd.iodocker-buildx-plugindocker-compose-plugin出现  “[Errno14]curl#7-“Failedtoconnectto2a03:2880:f10e:83:face:b00c:0:25de:网络不可达”修改其下载源:yum-config-manager--add-repo......
  • 参加阿里云云消息队列 RabbitMQ 版动手操作,赠送博客园T恤
    这是8月份园子和阿里云的第3期推广合作,招募100人参加云消息队列RabbitMQ版动手操作,有效完成动手操作的前100人赠送1件原价79元的博客园T恤,如果不需要T恤,也可以选原价不高于79元的其他周边。活动官网:https://developer.aliyun.com/special/yunduanwendao/rabbitmq01参与步骤:1......
  • P5535 【XR-3】小道消息
    先介绍伯特兰·切比雪夫定理:伯特兰—切比雪夫定理说明:若整数n>3,则至少存在一个质数p,符合n<p<2n−2。另一个稍弱说法是:对于所有大于1的整数n,至少存在一个质数p,符合n<p<2n。知道这个之后这道题就很简单了,我们先简单想想一个质数在一天可以通知除去它的倍数的所有数。那我们来分讨一......
  • 陪玩系统app如何配置推送设置,手把手教你uniapp 如何打通消息推送
    进入uniapp开发者中心,开发者中心包名:每个app都有自己的一个身份证,叫做包名,很多地方会用到。包名去HBuilderX获取,点击发行app云打包可获取app包名说明:推送采用uniapp的官方推送,实际uniapp也是和个推合作,走的是个推的sdk。我们采用uniapp的推送1.0版本,不使用2.0,因为2.0必......
  • 58同城微聊消息自动回复 – 浏览器插件
    功能介绍浏览器插件源码开放,可以随意二次开发,无时间限制,无账号限制,无电脑限制实现原理,纯浏览器插件实现,监控浏览器界面元素变动,获取直播间或者直播中控后台的评论文本,匹配回复关键词或调用AI接口,再利用js模拟输入和点击等操作支持以下中控台或直播间地址,获取评论与回复评论......
  • RabbitMQ普通集群同一宿主机docker搭建
    1.准备3个节点安装rabbitmq,搭建集群(注意:每个节点启动间隔15~20s,如果启动失败,需删除宿主机文件重新启动)2.宿主机文件目录手动创建,并设置可操作权限准备宿主机文件目录cd/usr/local/创建rabbitmq映射目录mkdirrabbitmqcdrabbitmqmkdir1mkdir2mkdir3cd1mkdirli......