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、新建管理员用户

# 设置用户名和密码
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、用户管理

# 新增一个用户
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的情况下),无法看到节点信息,也无法对策略进行管理。

  • 其他

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

# 设置用户角色
rabbitmqctl set_user_tags Username Tag

7. 权限管理

# 设置用户权限
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

Last updated