> For the complete documentation index, see [llms.txt](https://www.onee.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.onee.io/blog/rabbitmq-chu-ci-chang-shi.md).

# RabbitMQ 初次尝试

最近有个想法，想实现通过手机客户端发送指令，实时的控制家中的树莓派进行一些操作，一个迷你的物联网模型，手机端发送指令容易实现，树莓派执行操作也还好说，问题在于一个公网的请求怎么传达给一个内网的设备，而且要实时，开始想法是手机发指令到服务器，树莓派不停的循环向服务器请求，看有没有最新的指令需要处理，显然这个想法看上去就比较 Low，之后了解到有消息队列这么个东西，手机端可以把指令发送给消息队列，消息队列同时就可以把消息推给树莓派，这样树莓派就可以不用循环的去请求服务器，经比较最终选择了 RabbitMQ，Mac 安装 RabbitMQ 还是比较简单的，就不介绍安装方法了，以下是一些基本操作以及远程连接 RabbitMQ 需要的一些配置。

#### **1、基本命令**

* 在后台启动 RabbitMQ：`rabbitmq-server -detached`
* 关闭 RabbitMQ：`rabbitmqctl stop`

#### **2、guest 账户只能访问 localhost**

在安装目录下找到 `ebin` 文件夹

编辑 `rabbit.app` 文件

找到 `{loopback_users, [<<"guest">>]}` 改为 `{loopback_users, []}`

*\* 注：guest 账户为默认账户，最好修改密码或删除帐户*

#### **3、新建管理员用户**

```shell
# 设置用户名和密码
rabbitmqctl add_user root root
# 设置用户标签
rabbitmqctl set_user_tags root administrator
# 设置用户权限
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
```

#### **4、远程无法连接 RabbitMQ 服务器**

找到 RabbitMQ 配置文件 `rabbitmq-env.conf`

以 macOS 为例，路径为 `/usr/local/etc/rabbitmq/rabbitmq-env.conf`

将 `NODE_IP_ADDRESS` 绑定的IP地址修改为 `0.0.0.0`

保存并重启服务

#### **5、用户管理**

```shell
# 新增一个用户
rabbitmqctl add_user Username Password
# 删除一个用户
rabbitmqctl delete_user Username
# 修改用户密码
rabbitmqctl change_password Username Newpassword
# 查看当前用户列表
rabbitmqctl list_users
```

#### **6、角色管理**

* **超级管理员 `administrator`**

可登陆管理控制台（启用 management plugin 的情况下），可查看所有的信息，并且可以对用户，策略（policy）进行操作。

* **监控者 `monitoring`**

可登陆管理控制台（启用 management plugin 的情况下），同时可以查看 rabbitmq 节点的相关信息（进程数，内存使用情况，磁盘使用情况等）

* **策略制定者 `policymaker`**

可登陆管理控制台（启用 management plugin 的情况下）, 同时可以对 policy 进行管理，但无法查看节点的相关信息。

* **普通管理者 `management`**

仅可登陆管理控制台（启用management plugin的情况下），无法看到节点信息，也无法对策略进行管理。

* **其他**

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

```shell
# 设置用户角色
rabbitmqctl set_user_tags Username Tag
```

#### **7. 权限管理**

```shell
# 设置用户权限
rabbitmqctl set_permissions -p VHostPath Username ConfP WriteP ReadP
# 查看(指定hostpath)所有用户的权限信息
rabbitmqctl list_permissions [-p VHostPath]
# 查看指定用户的权限信息
rabbitmqctl list_user_permissions Username
# 清除用户权限信息
rabbitmqctl clear_permissions [-p VHostPath] Username
```
