⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 民工哥技术之路 「民工哥技术之路」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前面介绍了 RabbitMQ 基础入门等相关的知识点,今天我将详细的为大家介绍 RabbitMQ 安装与简单使用相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!

Windows 安装

官方windows安装文档,https://www.rabbitmq.com/install-windows.html

安装注意事项:

  • 推荐使用默认的安装路径
  • 系统用户名必须是英文

安装 Erlang

RabbitMQ是由erlang语言开发,所以我在安装 RabbitMQ 一定要先安装Erlang环境,注意版本匹配。

RabbitMQ安装

安装完后,cmd输入services.msc打开服务,开启RabbitMQ服务。

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

rabbitmq-plugins.bat enable rabbitmq_management

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

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

相关使用

创建用户

角色说明
  • 1、超级管理员(administrator)

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

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

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

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

    • 无法登陆管理控制台,通常就是普通的生产者和消费者。
创建虚拟主机Virtual Hosts

给用户添加虚拟主机权限

Linux 安装

下载

💧官网下载地址:https://www.rabbitmq.com/download.html![](https://static.iocoder.cn/73e97ac7741c13506f1f03f490e6948c.jpg)

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

rabbitmq-server-3.8.8-1.el7.noarch.rpm

erlang-21.3.8.21-1.el7.x86_64.rpm

💧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

启动

# 启动服务
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所在实例上拉取数据过来。

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

缺点
  • 可能会在RabbitMQ集群内部产生大量数据传输
  • 可用性没有达到保证,一台机器挂了就是挂了,无法恢复,只能手动恢复

镜像队列

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

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

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

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

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

坏处
  • 性能开销大,消息同步所有机器,导致网络带宽压力和消耗很重
  • 没有扩展性,如果某个queue负载很重,加机器,新增的机器也包含了这个queue的所有数据,没有办法扩展

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

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

Docker安装RabbitMQ集群

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

使用Docker安装RabbitMQ镜像

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

#查看拉取的镜像
docker images

运行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

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

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

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

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 ...

查看集群状态
rabbitmqctl cluster_status

常用命令

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

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

部署RabbitMQ镜像集群成功~

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

再次测试即可成功~

文章目录
  1. 1. Windows 安装
    1. 1.0.1. 安装 Erlang
    2. 1.0.2. RabbitMQ安装
    3. 1.0.3. 相关使用
      1. 1.0.3.0.1. 创建用户
      2. 1.0.3.0.2. 角色说明
      3. 1.0.3.0.3. 创建虚拟主机Virtual Hosts
  • 2. Linux 安装
    1. 2.0.1. 下载
    2. 2.0.2. 安装
    3. 2.0.3. 启动
    4. 2.0.4. Web管理界面及授权操作
      1. 2.0.4.0.1. 安装
  • 2.0.5. 添加用户
    1. 2.0.5.0.1. 重置命令
  • 2.0.6. 常用命令介绍
  • 3. RabbitMQ 集群部署
    1. 3.0.1. 单机模式
    2. 3.0.2. 普通集群模式
      1. 3.0.2.0.1. 缺点
  • 3.0.3. 镜像队列
    1. 3.0.3.0.1. 镜像集群模式的好处与坏处
    2. 3.0.3.0.2. 坏处
  • 3.0.4. 阿里云服务器下Docker搭建RabbitMQ集群
    1. 3.0.4.0.1. Docker安装RabbitMQ集群
    2. 3.0.4.0.2. 配置RabbitMQ节点之间的关系
    3. 3.0.4.0.3. 配置镜像队列
    4. 3.0.4.0.4. 查看集群状态
    5. 3.0.4.0.5. 测试RabbitMQ集群