RabbitMQ介绍

RabbitMQ 是一个开源的消息队列(MQ)

  • 最初由Rabbit Technologies开发,并使用Erlang编程语言编写。
  • 它实现了高级消息队列协议(AMQP),是一个功能丰富、灵活可靠的消息中间件。

安装环境

PS:RabbitMQ支持的版本及环境,新旧版本是有差异的,先检查一下系统环境是否支持安装安装的版本

文章的安装环境:

  • 系统版本:Linux CentOS Stream 8 64位
  • 内核:4.18.0-348.7.1.el8_5.x86_64
  • Erlang版本:erlang-26.2.2-1.el8.x86_64.rpm
  • RabbitMQ版本:rabbitmq-server-3.13.0-1.el8.noarch.rpm
1
2
3
4
# 查看Linux系统版本
lsb_release -a
# 查看Linux内核版本
uname -r

Erlang的安装下载

下载Erlang

RabbitMQ开发语言是Erlang,安装RabbitMQ需要Erlang环境,所以需要先安装Erlang
RabbitMQ和Erlang版本对照表】【Erlang 介绍地址】【Erlang 安装地址】【极简版Erlang 安装地址

根据RabbitMQ和Erlang版本对照表,下载合适版本的Erlang

安装Erlang

  1. 将下载好的Erlang RPM安装包上传到Linux上

    博主根据自己的版本下载的rpm包:erlang-26.2.2-1.el8.x86_64.rpm

    ps:/usr/local/erlang是博主自己创建存放rpm包的路径,所以博主将下载好的rpm包上传到该路径下了

  2. 执行命令
    1
    2
    3
    rpm -Uvh erlang-26.2.2-1.el8.x86_64.rpm

    sudo yum install erlang
  3. 验证是否安装成功
    1
    erl
  4. 查询安装位置
    1
    whereis erlang

安装Erlang(已废弃)

安装Erlang(已废弃)
1
2
3
4
5
6
7
8
9
10
11
# 1.安装Erlang编译依赖
yum -y install GCc glibc-devel make ncurses-devel openssl-devel xmlto perl wget
# 2.下载Erlang
wget http://www.erlang.org/download/otp_src_26.1.tar.gz
# 3.解压并安装
tar -xzvf otp_src_26.1.tar.gz cd otp_src_26.1 ./configure --prefix=/usr/local/erlang make && make install
# 4.配置环境变量
vi /etc/profile
# 5.添加配置,使配置生效,在shell中使用
ERL_PATH=/usr/local/erlang/bin
PATH=$ERL_PATH:$PATH source /etc/profile

RabbitMQ的安装下载

方式一:普通Linux下安装

下载RabbitMQ

  1. 安装插件
    1
    2
    # 安装依赖socat插件
    yum install -y socat
  2. 创建RabbitMQ文件夹
    1
    2
    3
    cd /usr/local

    mkdir rabbitmq
  3. 上传服务器

    将下载好的rabbitmq-serverrpm包上传到/usr/local/rabbitmq

  4. 解压
    1
    rpm -Uvh rabbitmq-server-3.13.0-1.el8.noarch.rpm
  5. 安装
    1
    yum install -y rabbitmq-server
  6. 启动RabbitMQ服务
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 启动rabbitmq
    systemctl start rabbitmq-server

    # 查看rabbitmq状态
    systemctl status rabbitmq-server

    # 设置rabbitmq服务开机自启动
    systemctl enable rabbitmq-server

    # 关闭rabbitmq服务
    systemctl stop rabbitmq-server

    # 重启rabbitmq服务
    systemctl restart rabbitmq-server
  7. 安装管理界面
    1
    2
    # 打开RabbitMQWeb管理界面插件
    rabbitmq-plugins enable rabbitmq_management
  8. 访问验证

    ip+端口进行浏览器访问:http://xxx.xxx.xxx.xxx:15672
    账号密码默认:guest guest

  9. 遇到问题
    • 使用默认的guest账密登录,会出现提示:User can only log in via localhost

      使用默认的guest账密登录,会出现提示:User can only log in via localhost
      原因:因为RabbitMQ禁止使用guest/guest权限通过除localhost外的访问,所以需要新增一个远程登录用户

      1. 创建一个新用户,并赋予角色权限(拿admin为例)
        1
        2
        3
        4
        5
        6
        # 创建用户
        rabbitmqctl add_user admin '123456'
        # 设置用户管理员角色
        rabbitmqctl set_user_tags admin administrator
        # 设置权限
        rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
      2. 通过新创建的用户登录即可

方式二:Docker下安装

  1. 搜索rabbitmq镜像
    1
    docker search rabbitmq
  2. 下载镜像
    1
    docker pull rabbitmq:3.13-management
  3. 查看已经下载的镜像
    1
    docker images
  4. 根据下载的镜像创建和启动容器
    1
    2
    3
    docker run -d --hostname rabbitmq --name rabbit -p 15672:15672 -p 5673:5672 rabbitmq:3.13-management

    docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
  5. 查看正在运行的容器
    1
    docker ps
  6. 进入rabbitmq容器内部
    1
    docker exec -it 容器id /bin/bash
  7. 运行rabbitmq
    1
    rabbitmq-plugins enable rabbitmq_management
  8. 访问验证

    ip+端口进行浏览器访问:http://xxx.xxx.xxx.xxx:15672
    账号密码默认:guest guest

  9. 退出rabbitmq容器内部
    1
    exit

如果想删除镜像(分三步顺序执行:停容器 > 删容器 > 删镜像)

1
2
3
停用容器:docker stop 容器id
删除容器:docker rm 容器id
删除镜像:docker rmi 镜像id
属性 含义
-d 后台运行容器
--name 指定容器名
-v 映射目录或文件
--rm 退出容器时会自动将其删除
-it 打开一个交互式的终端
-p 指定服务运行的端口
5672:应用访问端口
15672:控制台Web端口号
--hostname 主机名
RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名

RabbitMQ常见命令

Linux

直接在Linux上安装的RabbitMQ,常见操作命令如下

1
xxx

Dokcer

通过Docker安装的RabbitMQ,常见操作命令如下

首先需要先进入 RabbitMQ 容器内部,才能继续执行rabbitmqctl命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 进入容器内部
docker exec -it 容器id /bin/bash

# 退出容器内部
exit

# 查看用户列表
rabbitmqctl list_users

# 删除用户
rabbitmqctl delete_user 用户名

# 修改密码
rabbitmqctl change_password 用户名 '新用户密码'

# 创建用户
rabbitmqctl add_user 用户名 '用户密码'

# 设置用户角色
rabbitmqctl set_user_tags 用户名 角色

# 设置用户管理员角色
rabbitmqctl set_user_tags 用户名 administrator

# 设置权限,指定允许访问的vhost以及write/read
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"

# 清除用户权限
rabbitmqctl clear_permissions 用户名

# 查看指定用户下的权限
rabbitmqctl list_user_permissions 用户名

# 查看根径经下的所有用户权限
rabbitmqctl list_permissions

# 查看指定命名空间下的所有用户权限
rabbitmqctl list_permissions /文件路径

# 查看vhost(/)允许哪些用户访问
rabbitmqctl list_permissions -p /

内容补充

RabbitMQ角色(Tag)

角色 Tag标识 功能
超级管理员 administrator 可登陆管理控制台(启用management plugin的情况下),
可查看所有的信息,并且可以对用户,策略(policy)进行操作
监控者 monitoring 可登陆管理控制台(启用management plugin的情况下),
同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等),可以操作exchange、queue,无法对策略进行管理
策略制定者 policymaker 可登陆管理控制台(启用management plugin的情况下),
可以操作exchange、queue,同时可以对policy进行管理
普通管理者 management 仅可登陆管理控制台(启用management plugin的情况下),
可以操作exchange、queue,无法看到节点信息,也无法对策略进行管理
模仿者 Impersonator 不能登录后台,通常就是普通的生产者和消费者
其他 none 无法登陆管理控制台

RabbitMQ命名规范

Queue设计 Exchange设计 Routing-key 设计
MQ.{模块名}.{功能名}.[业务名1].[业务名2]… EX.{交换机类型}.{模块名}.{功能名}.[业务名1].[业务名2]… RK.{模块名}.{接收模块名}.{功能名}.[业务名1].[业务名2]…
示例:MQ.PAY.ORDER.UNION.OFFLINE
(支付模块银联线下支付消息 发送给订单服务)
示例:EX.TOPIC.PAY.UNION.OFFLINE
(支付模块银联线下支付)
示例:RK.PAY.UNION.OFFLINE
(支付模块银联线下支付)