简介
RabbitMQ是一个消息代理,,它接收并转发消息。RabbitMQ 是轻量级的,易于在本地和云端部署。它支持多种消息传递协议。RabbitMQ 可以部署在分布式和联合配置中,以满足大规模、高可用性的要求。
安装
RabbitMQ 运行依赖ERLANG环境,所以首先去官网下载并安装ERLANG。
安装完成后配置环境变量 ERLANG_HOME
, 然后再往 PATH 中添加 %ERLANG_HOME%\bin
从RabbitMQ官网选择合适的RabbitMQ版本下载,运行下载回来的的.exe文件,按照提示操作直至安装完成。
打开命令行窗口,进入 RabbitMQ 安装目录下的sbin目录,输入命令 rabbitmq-plugins enable rabbitmq_management
启用管理界面插件,然后运行 rabbitmq-server.bat 启动服务。
打开浏览器输入http://127.0.0.1:15672访问管理界面,使用默认的用户名和密码guest/guest登录。
管理用户和权限
RabbitMQ 提供了 CLI 工具管理用户和权限,可以参考官方文档。
生成复杂密码是一种常见的安全做法,通常涉及非字母数字字符。此做法完全适用于RabbitMQ用户。shell(bash、zsh等)将某些字符(!、?、&、^、"、'、*、~等)解释为控制字符。当在命令行上为rabbitmqctl add_user
、rabbitmqctl change_password
和其他接受密码的命令指定密码时,必须为所使用的shell适当地转义这些控制字符。如果转义不当,命令将失败,或者RabbitMQ CLI工具将从shell接收到不同的值。
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-l] [-q] <command> [<command options>]
General options:
-n node
-q quiet
-t timeout
-l longnames
rabbitmqctl
可选参数
-
node
默认节点为"rabbit@server",其中"server"是本地主机名。在主机上名为"server.example.com",RabbitMQ Erlang节点的节点名通常是rabbit@server(除非RABBITMQ_NODENAME已设置为在代理启动时的非默认值)。hostname-s的输出通常是在"@"符号后使用的正确后缀。 -
quiet
标志选择安静输出模式。信息性消息为在静音模式有效时被抑制。 -
timeout
操作超时(秒)。仅适用于"list"命令。默认为无穷。 -
longnames
如果RabbitMQ broker 使用长节点名为erlang分发,则"longnames"应该指定选项。
用户管理
- 查看所有用户
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-q] list_users
- 添加用户
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-q] add_user <username> <password>
添加用户 test 密码设置为 test rabbitmqctl add_user "test" "test"
- 修改用户密码
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-q] change_password <username> <password>
修改用户 test 的密码为 test1 rabbitmqctl change_password "test" "test1"
- 删除用户
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-q] delete_user <username>
删除用户 test rabbitmqctl delete_user "test"
- 验证用户
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-q] authenticate_user <username> <password>
验证用户 test 的密码是否为 test rabbitmqctl authenticate_user "test" "test"
权限管理
操作权限分为以下几种:
- administrator:(管理员)可以登录控制台、查看所有信息、并对rabbitmq进行管理
- monToring:(监控者)可以登录控制台,查看所有信息
- policymaker:(策略制定者)可以登录控制台指定策略
- managment:(普通管理员)可以进行登录控制
对应指令中的 tag 标签。
- 设置用户角色分配操作权限
bash
rabbitmqctl [-n <node>] [-t <timeout>] [-q] set_user_tags <username> <tag> [...]
给 test 用户添加管理员权限 rabbitmqctl set_user_tags test administrator
- 授予权限
bash
# First ".*" for configure permission on every entity
# Second ".*" for write permission on every entity
# Third ".*" for read permission on every entity
rabbitmqctl [-n <node>] [-t <timeout>] [-q] set_permissions [-p <vhost>] <username> <conf> <write> <read>
为 test 用户添加资源权限(授予虚拟机根节点的所有权限) rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
- 回收权限
bash
# Revokes permissions in a virtual host
rabbitmqctl [-n <node>] [-t <timeout>] [-q] clear_permissions [-p vhost] <username>
取消用户 test 的权限 rabbitmqctl clear_permissions -p / "username"
更多操作可以参考 rabbitmqctl --help
。
端口配置
RabbitMQ 安装目录下的 etc 目录中有一个 README.txt 文件, 根据其描述可知,RabbitMQ 默认的配置文件路径为C:\Users\%USERNAME%\AppData\Roaming\RabbitMQ\rabbitmq.config
, 如果找不到该文件那么我们新建一个,可以将安装目录下的 etc 目录中的 rabbitmq.config.example 文件内容拷贝过去,按需修改。
使用rabbitmqctl status
指令查看RabittMQ信息。
端口修改
15672
RabbitMQHTTP_API的端口,管理员用户才能访问,用于管理RabbitMQ,需要启动Management插件。在 rabbitmq.config 文件中找到 rabbitmq_management 属性,修改 listener 中的 port 属性。
bash
{rabbitmq_management,
[
{listener, [{port, 15672},
{ip, "127.0.0.1"},
{ssl, true}
]
}
5672
RabbitMQ的通讯端口,在 rabbitmq.config 文件中找到 rabbit 属性,修改 tcp_listeners 属性。
bash
{
rabbit,
[{
tcp_listeners,
[
{"127.0.0.1", 5672},
{"::1", 5672}
]
}]
}
可能遇到的问题
1、node with name "rabbit" already running on "localhost"
描述: 启动 rabbitmq-server 时,报错 node with name "rabbit" already running on "localhost"
。
解决方案: tasklist | findstr erl
找到对应进程, taskkill /pid 对应的pid /f
将其结束, 重新启动 rabbitmq-server。
2、could not start kernel pid",application_controller
描述: 启动 rabbitmq-server 时, 报错 {"could not start kernel pid",application_controller,"error in config file \"c:/Users/admin/AppData/Roaming/RabbitMQ/rabbitmq.config\" (554): syntax error before: ']'"}
解决方案: 由于rabbitmq.conf 是JSON 格式的,所以修改配置后尤其要注意修改后的配置文件内容是否符合JSON格式。按照错误提示找到对应行,发现多了一个逗号,将其删除保存后重新启动。