👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
《项目实战(视频)》:从书中学,往事中“练”
《互联网高频面试题》:面朝简历学习,春暖花开
《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题
《精进 Java 学习指南》:系统学习,互联网主流技术栈
《必读 Java 源码专栏》:知其然,知其所以然
👉这是一个或许对你有用的开源项目
国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。
功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:
Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud
视频教程:https://doc.iocoder.cn
前面介绍了 RabbitMQ 基础入门等相关的知识点,今天我将详细的为大家介绍 RabbitMQ 安装与简单使用 相关知识,希望大家能够从中收获多多!如有帮助,请点在看 、转发 支持一波!!!
Windows 安装
官方windows安装文档,https://www.rabbitmq.com/install-windows.html
安装注意事项:
推荐使用默认的安装路径
系统用户名必须是英文
安装 Erlang
RabbitMQ是由erlang语言开发,所以我在安装 RabbitMQ 一定要先安装Erlang环境,注意版本匹配。
https://www.rabbitmq.com/which-erlang.html 查看版本选择
https://erlang.org/download/otp_win64_25.0.exe erlang版本下载
右击 otp_win64_25.0.exe 以管理员身份运行 进行安装
安装Erlang只需要下一步下一步即可
RabbitMQ安装
https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.10.10 rabbitMQ版本下载
安装RabbitMQ只需要下一步下一步即可
右击 rabbitmq-server-3.10.10.exe以管理员身份运行进行安装
安装完后,cmd输入services.msc打开服务,开启RabbitMQ服务。
![3bc0cb3568066ff52505f6fd3bb841f2.png](https://i-blog.csdnimg.cn/blog_migrate/f77a9ab7b76b38cdb2e44bcef1eb7d36.png)
通过windows快捷键直接找到sbin命令,如果没有直接找到安装目录下找到sbin目录,以管理员身份运行。输入下面命令,启动管理页面。
rabbitmq-plugins.bat enable rabbitmq_management
RabbitMQ在安装好后,可以访问 http://localhost:15672 ,其自带了guest/guest 的用户名和密码。
如果以上操作都进行后,仍然访问不到页面,请重启电脑再次测试。
相关使用
创建用户
![1fbe22e2c321f6dba3c503d8a79351b4.png](https://i-blog.csdnimg.cn/blog_migrate/5010b6ca966d50585ce7d2c584a3f7ae.png)
角色说明
1、超级管理员(administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、监控者(monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
4、普通管理者(management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
创建虚拟主机Virtual Hosts
![714b69721856d4bbcb2c7ecadef4bed7.png](https://i-blog.csdnimg.cn/blog_migrate/7e3df5407051b96d4ada65c31875613a.png)
给用户添加虚拟主机权限
![9c088d92aebca34cce0051ec6b21e65e.png](https://i-blog.csdnimg.cn/blog_migrate/dfd65721000db8a7ee13b20d842c11a3.png)
![a13c541db54b56c31c949c43ccfa62d7.png](https://i-blog.csdnimg.cn/blog_migrate/f89b8f0eddc1944a0bd4507ca75d61cb.png)
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
视频教程:https://doc.iocoder.cn/video/
Linux 安装
下载
💧官网下载地址:https://www.rabbitmq.com/download.html
💧这里我们选择的版本号(注意这两版本要求)
rabbitmq-server-3.8.8-1.el7.noarch.rpm
GitHub:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.8
erlang-21.3.8.21-1.el7.x86_64.rpm
官网:https://www.erlang-solutions.com/downloads/
![b10505de827f0031f8052c2887153d2c.png](https://i-blog.csdnimg.cn/blog_migrate/63548b9d7be28be19fb1c8d41356ec92.png)
💧Red Hat 8, CentOS 8 和 modern Fedora 版本,把 “el7” 替换成 “el8”
安装
上传到 /usr/local/software 目录下(如果没有 software 需要自己创建)。
rpm -ivh erlang-21.3.8.21-1.el7.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
启动
> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
> * 项目地址:<https://github.com/YunaiV/yudao-cloud>
> * 视频教程:<https://doc.iocoder.cn/video/>
# 启动服务
systemctl start rabbitmq-server
# 查看服务状态
systemctl status rabbitmq-server
# 开机自启动
systemctl enable rabbitmq-server
# 停止服务
systemctl stop rabbitmq-server
# 重启服务
systemctl restart rabbitmq-server
Web管理界面及授权操作
安装
默认情况下,是没有安装web端的客户端插件,需要安装才可以生效。
rabbitmq-plugins enable rabbitmq_management
安装完毕以后,重启服务即可。
systemctl restart rabbitmq-server
访问 http://127.0.0.1:15672 ,用默认账号密码(guest)登录,出现权限问题。
默认情况只能在 localhost 本机下访问,所以需要添加一个远程登录的用户。
添加用户
# 创建账号和密码
rabbitmqctl add_user admin 123456
# 设置用户角色
rabbitmqctl set_user_tags admin administrator
# 为用户添加资源权限
# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
# 添加配置、写、读权限
💧用户级别
administrator:可以登录控制台、查看所有信息、可以对 rabbitmq 进行管理
monitoring:监控者 登录控制台,查看所有信息
policymaker:策略制定者 登录控制台,指定策略
managment:普通管理员 登录控制台
再次登录,用 admin 用户。
重置命令
关闭应用的命令为:rabbitmqctl stop_app 清除的命令为:rabbitmqctl reset 重新启动命令为:rabbitmqctl start_app
常用命令介绍
以下是一些常用的 RabbitMQ 控制台命令(使用 rabbitmqctl):
#列出所有队列
rabbitmqctl list_queues
#列出所有交换器
rabbitmqctl list_exchanges
#列出所有绑定
rabbitmqctl list_bindings
#列出所有连接
rabbitmqctl list_connections
#列出所有通道
rabbitmqctl list_channels
#列出所有消费者
rabbitmqctl list_consumers
#查看队列的状态信息
rabbitmqctl list_queues name messages_ready messages_unacknowledged
#查看交换器的状态信息
rabbitmqctl list_exchanges name type
#查看连接的状态信息
rabbitmqctl list_connections name user state
#查看通道的状态信息
rabbitmqctl list_channels connection_name user number_of_consumers
#查看 RabbitMQ 节点的状态信息
rabbitmqctl status
#查看 RabbitMQ 节点的详细状态信息
rabbitmqctl status --verbose
#查看 RabbitMQ 节点的配置信息
rabbitmqctl environment
#查看 RabbitMQ 节点的运行日志
rabbitmqctl report
#查看 RabbitMQ 节点的内存使用情况
rabbitmqctl eval 'memory'
这些命令可以用于获取 RabbitMQ 实例的各种状态信息,例如队列、交换器、连接、通道等的状态,从而帮助进行监控和管理 RabbitMQ 实例。更多的命令和选项可以通过 rabbitmqctl 的官方文档进行查阅和学习。注意,在使用 rabbitmqctl 命令时,需要具有足够的权限,并且谨慎操作,以避免对 RabbitMQ 实例造成不必要的影响。
RabbitMQ 集群部署
rabbitmq有三种模式:单机模式,普通集群模式,镜像集群模式。
单机模式
Demo级别的,一般只是本机测试玩玩而已,生产环境下不会用的。
普通集群模式
在多台机器 上启动多个rabbitmq实例 ,每个机器启动一个。 但是你创建的queue ,只会放在一个rabbtimq实例 上,但是每个实例都同步queue的元数据(存放含queue数据的真正实例位置) 。消费的时候,实际上如果连接到了另外一个实例,那么那个实例会从queue所在实例上拉取数据过来。
![5858c5b6e06a9b2740f9ae4cc497a15c.png](https://i-blog.csdnimg.cn/blog_migrate/c043af5fce762728ad6368fdec8d7121.png)
普通集群的方式,确实达到了消息的高可用,但没办法保证可靠性,没做到分布式,简而言之,只是一个普通的集群。
缺点
可能会在RabbitMQ集群内部产生大量数据传输
可用性没有达到保证,一台机器挂了就是挂了,无法恢复,只能手动恢复
镜像队列
这种模式,才是所谓的rabbitmq的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论元数据还是queue里的消息都会存在于多个实例上,然后每次你写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。
![299fea71a2f7604daf5e70992d2d7f1e.png](https://i-blog.csdnimg.cn/blog_migrate/8a73a55b90246cd0f5cc7adc1609aefb.png)
上图中每个节点有一个queue,生产者生产完毕数据后投递到指定交换机的队列,交换机的队列进行消息同步。
每个节点queue都有一个完整的rabbitmq节点,所以这种方式叫做镜像集群。
镜像集群模式的好处与坏处
好处:任何一个节点宕机后,其它节点不受影响,正常使用
坏处
性能开销大,消息同步所有机器,导致网络带宽压力和消耗很重
没有扩展性,如果某个queue负载很重,加机器,新增的机器也包含了这个queue的所有数据,没有办法扩展
对于以上方式,我们的镜像集群可以通过配置来解决这种扩展性的问题,配置同步的方式。
阿里云服务器下Docker搭建RabbitMQ集群
Docker安装RabbitMQ集群
确保机器中安装了Docker,若未安装,可看:
使用Docker安装RabbitMQ镜像
# 拉取镜像,带有管理界面的版本
docker pull rabbitmq:management
#查看拉取的镜像
docker images
![b10beb09ac585fb0d244730c381c1589.png](https://i-blog.csdnimg.cn/blog_migrate/cbc3b8ed3af502a21ee683e606626bce.png)
运行Docker镜像
# 开启第一个RabbitMQ服务
docker run -d --hostname myRabbit1 --name rabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
# 开启第二个
docker run -d --hostname myRabbit2 --name rabbit2 -p 15673:15672 -p 5673:5672 --link rabbit1:myRabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
# 开启第三个
docker run -d --hostname myRabbit3 --name rabbit3 -p 15674:15672 -p 5674:5672 --link rabbit1:myRabbit1 --link rabbit2:myRabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
查看正在运行的镜像
docker ps
成功运行
配置RabbitMQ节点之间的关系
设置节点1
[root@wanghuichen /]# docker exec -it rabbit1 bash
root@myRabbit1:/# rabbitmqctl stop_app
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Stopping rabbit application on node rabbit@myRabbit1 ...
root@myRabbit1:/# rabbitmqctl reset
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Resetting node rabbit@myRabbit1 ...
root@myRabbit1:/# rabbitmqctl
![a124667679852e188036e1273872c8c8.png](https://i-blog.csdnimg.cn/blog_migrate/a2b3bff616595289d57cef5b76d68605.png)
设置节点2
[root@wanghuichen /]# docker exec -it rabbit2 bash
root@myRabbit2:/# rabbitmqctl stop_app
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Stopping rabbit application on node rabbit@myRabbit2 ...
root@myRabbit2:/# rabbitmqctl reset
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Resetting node rabbit@myRabbit2 ...
root@myRabbit2:/# rabbitmqctl join_cluster --ram rabbit@myRabbit1
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Clustering node rabbit@myRabbit2 with rabbit@myRabbit1
root@myRabbit2:/# rabbitmqctl join_cluster --ram rabbit@myRabbit1
![175d6ebc71f38b7a8c25517d2f0adefa.png](https://i-blog.csdnimg.cn/blog_migrate/34f1a6de2d21df4a643b92735238dd31.png)
配置节点3
[root@wanghuichen /]# docker exec -it rabbit3 bash
root@myRabbit3:/# rabbitmqctl stop_app
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Stopping rabbit application on node rabbit@myRabbit3 ...
root@myRabbit3:/# rabbitmqctl reset
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Resetting node rabbit@myRabbit3 ...
root@myRabbit3:/# rabbitmqctl join_cluster --ram rabbit@myRabbit1
root@myRabbit3:/# rabbitmqctl start_app
![b742917e9c2dfadcc116f134633935da.png](https://i-blog.csdnimg.cn/blog_migrate/ff4018c0b5e8ec5f9082da25fdeb3a71.png)
进入每个集群依次设置用户密码
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
配置镜像队列
[root@wanghuichen /]# docker exec -it rabbit1 bash
root@myRabbit1:/# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
root@myRabbit1:/# rabbitmqctl cluster_status
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
Cluster status of node rabbit@myRabbit1 ...
![78b0896d70959a5ab9f6aa93cf1e2ecf.png](https://i-blog.csdnimg.cn/blog_migrate/fe76827d30152f0705e4941ce09016cb.png)
查看集群状态
rabbitmqctl cluster_status
![6d32b8bcc45304991bad12fd8087ed89.png](https://i-blog.csdnimg.cn/blog_migrate/5ebe8e8b051aab27ee78e7050b88b010.png)
常用命令
# 查看已经运行过但停止了的镜像
docker ps -a
# 停止镜像
docker stop 镜像id/镜像名称
# 开启镜像,恢复运行状态
dockers start 镜像id/镜像名称
# 删除镜像
docker rm 镜像id/镜像名称
# 删除所有镜像
docker rmi $(docker ps -a)
测试RabbitMQ集群
浏览器输入 您的ip地址:15673
![63e84db5b4bc51661d1bf505e16e33cc.png](https://i-blog.csdnimg.cn/blog_migrate/8ae87e5c9e3d0135fff56557f63bbbfb.png)
部署RabbitMQ镜像集群成功~
如果出现无法访问的情况,可在阿里云服务器开启安全组,因为阿里云默认全部开启了安全组,配置允许访问的端口即可。
![fc092bc3f308b90770dd9b8944dc6b3f.png](https://i-blog.csdnimg.cn/blog_migrate/4c0cff2dc39af0bbb0fffe907dc6270d.png)
再次测试即可成功~
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)