# 一、RabbitMQ基础
RabbitMQ官网:https://www.rabbitmq.com/ (opens new window)
RabbitMQ是由ERlang
语言开发的AMQP
协议的消息队列。
AMQP Advanced Message Queuing Protocol 高级消息队列协议
# 1.1 RabbitMQ核心概念
1、Broker
消息队列服务器主机。
2、Exchange
消息交换机,指定消息按照什么规则、发送到那个队列。
- Exchange作用
- 接受生产者的消息;
- 负责向
Queue
进行消息投递;
- Exchange类型
- 广播模式(
fanout
):一条消息被所有消费者处理; - 直连模式(
direct
):生产者匹配消费者的Routing Key
; - 主题模式(
topic
):类似于fanout
与direct
的整合,所有可以匹配生产者Routing Key
的消费者都可以接收到该主题消息。
- 广播模式(
3、Queue
消息对立载体,每个消息都会被投入一个或多个队列。
4、Binding
绑定,把Exchange
和Queue
按照路由规则进行绑定。
5、Routing Key
路由关键字,Exchange根据该关键字进行消息投递。
6、Vhost
虚拟主机,一个Broker可以设定多个Vhost,实现用户的权限隔离。
7、Channel
消息通道,在客户端每个连接中,可建立多个Channel(会话任务)。
8、Producer
消息生产者。
9、Consumer
消息消费者。
# 1.2 RabbitMQ工作模式
RabbitMQ 提供了 6 种工作模式:
工作模式 | 英文 | 描述 |
---|---|---|
简单模式 | ||
工作队列模式 | Work queues | 一个生产者 -> 一个消息队列 -> 一个消费者 |
发布与订阅模式 | Publish/Subscribe | 一个生产者 -> 一个交换机 -> N个消息队列 -> N个消费者 |
路由模式 | Routing | 在发布订阅模式的基础上,增加了Routing Key |
主题模式 | Topics | 在路由模式的基础上,增加了通配符的功能 |
远程调用模式 | RPC | 生产者 -> 交换机 -> 消息队列 -> 消费者 -> 返回状态消息给原有生产者 |
# 1.3 RabbitMQ端口说明
端口 | 说明 |
---|---|
4369 | Erlang发现口 |
5672 | Client端通信口 |
15672 | 管理界面UI端口 |
25672 | Server间内部通信口 |
举例说明:
我们访问RabbitMQ管理界面可以访问如下:http://localhost:15672/ (opens new window)
我们连接RabbitMQ的话就要用Client端通信口:server: amqp://guest:guest@localhost:5672/
# 1.4 RabbitMQ用户角色
RabbitMQ用户角色可分为五类:超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
用户也可以同时具有多个角色。
# 二、RabbitMQ安装
# 2.1 Windows安装(3.10.x)
由于RabbitMQ是基于Erlang
的,所以,在正式安装RabbitMQ之前,需要先安装一下Erlang。
RabbitMQ Erlang Version对应关系 (opens new window)
Github源码说明文档 (opens new window)
# 下载并安装Erlang
选择下载版本,进行安装,按照步骤默认安装即可。
配置环境变量:配置ERLANG_HOME环境变量,其值指向erlang的安装目录。
ERLANG_HOME
F:\Install_java\Erlang OTP
2
另外将 %ERLANG_HOME%\bin 加入到Path中。
检查安装是否成功:打开cmd,输入erl
# 下载并安装 MQ
RabbitMQ官网下载地址 (opens new window)
下载:选择Downloads on GitHub——Windows installer 进行下载。
安装:按照步骤默认安装即可。
安装可视化插件:CMD进入安装Rabbitmq的sbin目录,安装插件rabbitmq_management。
cd F:\Install_java\RabbitMQ3.10.6\rabbitmq_server-3.10.6\sbin
rabbitmq-plugins enable rabbitmq_management
2
启动RabbitMQ服务:搜索程序,直接执行启动。
登录:浏览器输入http://localhost:15672/
默认账户密码:guest
/guest
# 用户设置
RabbitMQ的用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。
新增用户
可通过可视化UI界面进行添加用户。
通过命令:
进入安装路径sbin
目录:
# 查看已有用户及用户的角色:
rabbitmqctl.bat list_users
# 新增一个用户:
rabbitmqctl.bat add_user username password
# 修改密码
rabbitmqctl change_password userName newPassword
# 删除用户信息
rabbitmqctl.bat delete_user username
2
3
4
5
6
7
8
绑定角色
rabbitmqctl set_user_tags admin administrator
设置权限
rabbitmqctl set_permissions -p / aaa.*.*.*
查看rabbitmq相关命令的方法
# 查看rabbitmq所有命令
rabbitmqctl help
# 查看rabbitmq具体一个命令的描述, 比如add_user
rabbitmqctl help add_user
2
3
4
# 2.2 Docker安装(3.7.x)
下载镜像rabbitMQ-manager
docker pull rabbitmq:3.7.18-management
编写docker-compse.yml
mkdir -p /usr/local/docker/rabbitmq
cd /usr/local/docker/rabbitmq
vi docker-compose.yml
2
3
version: '3'
services:
rabbitmq:
restart: always
image: rabbitmq:3.7.18-management
container_name: rabbitmq_3.7.18-m
environment:
RABBITMQ_DEFAULT_VHOST: my_vhost
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: admin
ports:
- 5672:5672
- 15672:15672
volumes:
- ./data:/var/lib/rabbitmq
2
3
4
5
6
7
8
9
10
11
12
13
14
15
登录RabbitMQ管理界面:http://localhost:15672 (opens new window)
admin
/admin
# 2.3 延迟队列插件安装
RabbitMQ 实现了一个插件 x-delay-message
来实现延时队列,我们可以从 这里 (opens new window) 下载到它.
- 选择
rabbitmq_delayed_message_exchange
插件 - 选择
.ez 格式
的文件下载
# Windows安装
下载后放置 RabbitMQ 的安装目录下的 plugins
目录
在sbin
目录下执行命令
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
完毕!
# Docker安装(3.10.x)
第一步:自建镜像rabbitmq: 3.10-management-delayed
- 构建Dockerfile
# rabbitmq management delay
From rabbitmq:3.10-management
COPY rabbitmq_delayed_message_exchange-3.10.2.ez /plugins
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
2
3
4
- 上传rabbitmq_delayed_message_exchange-3.10.2.ez至Dockerfile同级目录;
- 执行命令构建镜像;
docker build -t rabbitmq:3.10-management-delayed .
第二步:调整docker-compse.yml中的镜像版本为自建镜像。
- 修改docker-compse.yml
version: '3.4'
services:
rabbitmq:
restart: always
image: rabbitmq:3.10-management-delayed
container_name: rabbitmq_3.10-m-delayed
environment:
RABBITMQ_DEFAULT_VHOST: /
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- 5672:5672
- 15672:15672
volumes:
- ./data:/var/lib/rabbitmq
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 三、RabbitMQ FAQ
# Win安装使用guest账户报错
RabbitMQ默认提供了一个guest/guest用户,但是从3.3.0 版本以后该账号只能localhost登陆(User can only log in via localhost),解决办法就是我们通过命令行创建一个管理员账号。
通过以下命令创建一个用户admin,密码为admin@123。
rabbitmqctl add_user admin admin@123
创建完成之后通过以下命令设置用户标签为administrator。
rabbitmqctl set_user_tags admin administrator
给用户admin赋予权限,授予admin用户可访问虚拟主机 /,并在所有的资源上具备可配置、可写及可读的权限。
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
这样我们就完成了一个用户的创建,通过以下命令可以看出当前的所有用户。
rabbitmqctl list_users
最后一步,我们就可以用admin登陆管理界面。