消息队列之 RabbitMQ 三(管理篇)
用户管理
我这快不想使用默认的guest用户,我新建立了一个用户poxiao,然后授予所有权限,使用下面的命令:
1 2 3 |
rabbitmqctl add_user poxiao 123456 rabbitmqctl set_user_tags poxiao administrator rabbitmqctl set_permissions -p / poxiao ".*" ".*" ".*" |
1 2 3 4 5 6 7 8 |
[root@iZm5eef03d3t5i0uciwpfxZ rabbitmq]# rabbitmqctl add_user poxiao 123456 Adding user "poxiao" ... You have mail in /var/spool/mail/root [root@iZm5eef03d3t5i0uciwpfxZ rabbitmq]# rabbitmqctl set_user_tags poxiao administrator Setting tags for user "poxiao" to [administrator] ... [root@iZm5eef03d3t5i0uciwpfxZ rabbitmq]# rabbitmqctl set_permissions -p / poxiao ".*" ".*" ".*" Setting permissions for user "poxiao" in vhost "/" ... [root@iZm5eef03d3t5i0uciwpfxZ rabbitmq]# |
上篇中介绍 把guest用户的远程功能打开了,新建用户后可以关闭
1 |
vi /etc/rabbitmq/rabbitmq.config |
重新注释掉,重启rabbitmq
删除guest用户:
1 |
rabbitmqctl delete_user guest |
用户管理其他命令:
1 2 3 4 5 6 |
新建用户:rabbitmqctl add_user usernamexxx pwdxxx 删除用户:rabbitmqctl delete_user usernamexxx 改密码: rabbimqctl change_password {username} {newpassword} 设置用户角色:rabbitmqctl set_user_tags {username} {tag ...} Tag可以为 administrator,monitoring, management 查看当前用户列表:rabbitmqctl list_users |
用户角色
按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。
设置用户角色的命令为:
1 |
rabbitmqctl set_user_tags User Tag |
User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
也可以给同一用户设置多个角色,例如
1 |
rabbitmqctl set_user_tags hncscwc monitoring policymaker |
virtual_host管理
创建virtual_host game 并赋予用户权限
1 2 |
rabbitmqctl add_vhost game rabbitmqctl set_permissions -p game poxiao ".*" ".*" ".*" |
virtual_host命令:
1 2 |
新建virtual_host: rabbitmqctl add_vhost xxx 撤销virtual_host:rabbitmqctl delete_vhost xxx |
权限管理
用户权限
用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中”How permissions work”部分。
相关命令为:
(1) 设置用户权限
1 |
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP |
(2) 查看(指定hostpath)所有用户的权限信息
1 |
rabbitmqctl list_permissions [-p VHostPath] |
(3) 查看指定用户的权限信息
1 |
rabbitmqctl list_user_permissions User |
(4) 清除用户的权限信息
1 |
rabbitmqctl clear_permissions [-p VHostPath] User |
1 2 3 4 5 6 7 8 9 10 |
rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加权限 rabbitmqctl set_user_tags username administrator //修改用户角色 权限设置说明:rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read} Vhostpath:Vhost路径。 user:用户名。 Conf:一个正则表达式match哪些配置资源能够被该用户访问。 Write:一个正则表达式match哪些配置资源能够被该用户读。 Read:一个正则表达式match哪些配置资源能够被该用户访问。 |
获取服务器状态信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
获取服务器状态:rabbitmqctl status 关闭应用:rabbitmqctl stop_app 启动应用,和上述关闭命令配合使用,达到清空队列的目的:rabbitmqctl start_app 清除所有队列:rabbitmqctl reset 查看所有队列信息:rabbitmqctl list_queues 获取队列信息:rabbitmqctl list_queues[-p vhostpath] [queueinfoitem ...] Queueinfoitem可以为:name,durable,auto_delete,arguments,messages_ready,messages_unacknowledged,messages,consumers,memory。 获取Exchange信息:rabbitmqctllist_exchanges[-p vhostpath] [exchangeinfoitem ...] Exchangeinfoitem有:name,type,durable,auto_delete,internal,arguments。 获取Binding信息:rabbitmqctllist_bindings[-p vhostpath] [bindinginfoitem ...] Bindinginfoitem有:source_name,source_kind,destination_name,destination_kind,routing_key,arguments。 获取Connection信息:rabbitmqctllist_connections [connectioninfoitem ...] Connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。 获取Channel信息:rabbitmqctl list_channels[channelinfoitem ...] Channelinfoitem有consumer_count,messages_unacknowledged,messages_uncommitted,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked。 |
日常管理也可以在可视化界面中进行:
最上侧的导航以此是:《概览》、《连接》、《信道》、《交换机》、《队列》、《用户管理》
无论是服务器监控还是日常的管理基本都可以解决,很方便。既然都图形化了我就不赘述了,建议都点开看下
RabbitMQ日志文件
通过日志文件方便我们定位很多问题,同样在WEB管理插件中可以看到日志文件的路径,我的是在/usr/local/rabbitmq/var/log/rabbitmq/,在该路径下有两个日志文件:rabbit@localhost.log和rabbit@localhost-sasl.log。saal(System Application Support libraries 系统应用支持库)用来记录Erlang相关的信息,举例来说可以通过这个文件看到Erlang的崩溃报告。
另外也可以通过绑定监听amq.rabbitmq.log交换机来订阅日志信息来实现更多功能。
参考资料:
http://www.rabbitmq.com/access-control.html
https://www.cnblogs.com/rzxiaojia/p/6605486.html
http://www.cnblogs.com/rollenholt/p/4098089.html
http://blog.csdn.net/super_rd/article/details/70327503