硬卷消息中间件系列(二):RabbitMQ 安装与简单使用

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

17dc66b33276da16d216e6de6e262539.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:民工哥技术之路

8465ff483fdc080a593be3b077e84afe.jpeg


前面介绍了 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

通过windows快捷键直接找到sbin命令,如果没有直接找到安装目录下找到sbin目录,以管理员身份运行。cf42cc2727f5e37897332257d00ac71a.png输入下面命令,启动管理页面。

rabbitmq-plugins.bat enable rabbitmq_management

RabbitMQ在安装好后,可以访问 http://localhost:15672 ,其自带了guest/guest 的用户名和密码。

如果以上操作都进行后,仍然访问不到页面,请重启电脑再次测试。

相关使用
创建用户
1fbe22e2c321f6dba3c503d8a79351b4.png
角色说明
  • 1、超级管理员(administrator)

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

  • 2、监控者(monitoring)

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

  • 3、策略制定者(policymaker)

    • 可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

  • 4、普通管理者(management)

    • 仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。

  • 5、其他

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

创建虚拟主机Virtual Hosts
714b69721856d4bbcb2c7ecadef4bed7.png

给用户添加虚拟主机权限

9c088d92aebca34cce0051ec6b21e65e.png a13c541db54b56c31c949c43ccfa62d7.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.html586ecf5ab6aad63aa27affc2ea6d9120.png

💧这里我们选择的版本号(注意这两版本要求)

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

💧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

普通集群的方式,确实达到了消息的高可用,但没办法保证可靠性,没做到分布式,简而言之,只是一个普通的集群。

缺点
  • 可能会在RabbitMQ集群内部产生大量数据传输

  • 可用性没有达到保证,一台机器挂了就是挂了,无法恢复,只能手动恢复

镜像队列

这种模式,才是所谓的rabbitmq的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论元数据还是queue里的消息都会存在于多个实例上,然后每次你写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。

299fea71a2f7604daf5e70992d2d7f1e.png

上图中每个节点有一个queue,生产者生产完毕数据后投递到指定交换机的队列,交换机的队列进行消息同步。

每个节点queue都有一个完整的rabbitmq节点,所以这种方式叫做镜像集群。

镜像集群模式的好处与坏处

好处:任何一个节点宕机后,其它节点不受影响,正常使用

坏处
  • 性能开销大,消息同步所有机器,导致网络带宽压力和消耗很重

  • 没有扩展性,如果某个queue负载很重,加机器,新增的机器也包含了这个queue的所有数据,没有办法扩展

对于以上方式,我们的镜像集群可以通过配置来解决这种扩展性的问题,配置同步的方式。

阿里云服务器下Docker搭建RabbitMQ集群
Docker安装RabbitMQ集群

确保机器中安装了Docker,若未安装,可看:

使用Docker安装RabbitMQ镜像

# 拉取镜像,带有管理界面的版本
docker pull rabbitmq:management

#查看拉取的镜像
docker images
b10beb09ac585fb0d244730c381c1589.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

935f91335001eb6d6c7bdaa031bc79b5.png成功运行

配置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
  • 设置节点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
  • 配置节点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

进入每个集群依次设置用户密码

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
查看集群状态
rabbitmqctl cluster_status
6d32b8bcc45304991bad12fd8087ed89.png

常用命令

# 查看已经运行过但停止了的镜像
docker ps -a
# 停止镜像
docker stop 镜像id/镜像名称
# 开启镜像,恢复运行状态
dockers start 镜像id/镜像名称
# 删除镜像
docker rm 镜像id/镜像名称
# 删除所有镜像
docker rmi $(docker ps -a)
测试RabbitMQ集群

浏览器输入 您的ip地址:15673

63e84db5b4bc51661d1bf505e16e33cc.png

部署RabbitMQ镜像集群成功~

如果出现无法访问的情况,可在阿里云服务器开启安全组,因为阿里云默认全部开启了安全组,配置允许访问的端口即可。

fc092bc3f308b90770dd9b8944dc6b3f.png

再次测试即可成功~


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

bb5cfa175a1a410fccafb8c40619a8f8.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

e56ce00225fc3bf41410b9604010338f.png

0841da9d4d05bd5ff8b1b9e8e75f3a5b.pnge89792a0f294b7d16b8bb7e1e788a6ab.png4371e50157aa28b71ed70cd4277dac48.pngac767d2c687e8f1ae22a3a6b12a7bdca.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值