RabbitMQ研究管理RabbitMQ
Posted wu6660563
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ研究管理RabbitMQ相关的知识,希望对你有一定的参考价值。
多租户与权限
每个RabbitMQ创建消息服务器,可以使用vhost虚拟主机,每个vhost之间相互独立,互不影响。
-
建立vhost1
rabbitmqctl add_vhost vhost1
-
删除vhost1
rabbitmqctl delete_vhost vhost1
删除一个vhost会删除下面所有的队列、交换器、绑定关系、用户权限等全部下属信息 -
查看vhost列表
rabbitmqctl list_vhosts
权限全部以vhost为单位,创建一个用户,用户会被指派到至少一个vhost
- 赋权
rabbitmqctl set_permissions [-p vhost] user conf write read
vhost:授予用户访问权限的vhost名称,可以设置为默认值,即vhost为/
user:可以访问指定vhost的用户名
conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式
write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式
read:一个用于匹配用户在哪些资源上拥有可读权限的正则表达式
授予root用户可访问虚拟主机vhost1,并在资源上具备可配置、可写、可读权限
rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"
授予root用户可访问虚拟主机vhost2,在以queue
开头的资源上具备可配置权限,并在所有资源上有用可写、可读权限
rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*"
-
清除权限
rabbitmqctl clear_permissions -p vhos1 root
-
列举权限
rabbitmqctl list_permissions [-p vhost]
rabbitmqctl list_user_permissions username
$ rabbitmqctl list_permissions -p vhost1
Listing permissions in vhost "vhost1"
root .* .* .*
$ rabbitmqctl list_user_permissions root
Listing permissions for user "root"
/ .* .* .*
vhost1 .* .* .*
用户管理
-
创建用户
rabbitmqctl add_user username pass
例子表示添加一个用户名是username,密码是pass的用户 -
修改用户密码
rabbitmqctl change_password username newpass
表示修改用户username的密码为newpass -
清除密码
rabbitmqctl clear_password username
表示清除用户username的密码,无密码或者密码为空 -
验证用户密码
rabbitmqctl authenticate_user username pass
表示验证用户密码,如果成功会提示Success
-
删除用户
rabbitmqctl delete_user username
表示删除用户username -
列出用户列表
rabbitmqctl list_users
此处结果需要讲解一下,用户的角色分为五种:
none:无任何角色。新创建的用户默认的时候是none
managent:可以访问Web管理页面
policymaker:包含managent的所有权限
monitoring:包含management的所有权限,并可以看到所有的连接、信道、节点信息
administrator:包含monitoring的所有权限,并且可以管理用户、虚拟主机、权限、策略、参数,代表最高权限 -
设置角色
rabbitmqctl set_user_tags username monitoring
给用户username设置为monitoring角色
Web管理
RabbitMQ有个Web插件来界面化管理
$ rabbitmq-plugins enable rabbitmq_management
The fol1owing plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying p1ugin configuration to rabbit@node1... started 6 plugins .
启动成功可以,可以通过界面化的方式直接管理
应用和集群管理
应用管理
-
rabbitmqctl stop
关闭RabbitMQ,如果创建的时候使用rabbitmq-server -detach
启动不会生成pid_file,否则需要指定pid_file来关闭 -
rabbitmqctl shutdown
关闭RabbitMQ,不同点在于这个不需要指定pid_file而可以阻塞等待指定进程的关闭 -
rabbitmqctl stop_app
关闭RabbitMQ,但是Erlang虚拟机还是处于运行状态 -
rabbitmqctl start_app
启动RabbitMQ应用
集群管理
rabbitmqctl join_cluster cluster_node [--ram]
将节点加入指定集群中,在这个命令执行前需要停止RabbitMQ应用并重置节点
rabbitmqctl cluster_status
查看集群的状态
rabbitmqctl change_cluster_node_type disc|ram
修改集群节点的类型,这个命令执行前需要停止RabbitMQ应用
rabbitmqctl forget_cluster_node [--offline]
将节点从集群中删除,允许离线执行
rabbitmqctl update_cluster_nodes clusternode
更新集群节点
rabbitmqctl sync_queue [-p vhost] queue
指示未同步队列queue的slave镜像可以同步到master镜像的内容,在同步过程中,这个队列的生产者和消费者会被阻塞,直到同步完成
rabbitmqctl cancel_sync_queue [-p vhost] queue
取消队列queue同步镜像
rabbitmqctl set_cluster_name name
设置集群名称
rabbitmqctl node_headlth_check
对节点健康检查
服务端状态
可以通过list_queues
、list_exchanges
、list_bindings
、list_consumers
等来查看服务端的状态,主要是分别针对队列、交换器、绑定关系、消费者等
list_queues
rabbitmqctl list_queues [-p vhost] [queue_item]
命令会返回队列的详细信息,分别按参数返回,类似表字段一样的概念,而queue_item就是多个字段,注意这个queue_item是表示下面列表中的任何值:
- name:队列名称
- durable:队列是否持久化
- auto_delete:队列是否自动删除
- arguments:队列的参数
- policy:应用到队列上的策略名称
- pid:队列关联的Erlang进程的ID
- owner_pid:处理排他队列连接的Erlang进程ID。如果此队列时非排他的,此值将为空。
- exclusive:队列是否是排他的
- exclusive_consumer_pid:订阅到此排他队列的消费者香港的进程ID
- exclusive_consumer_tag:订阅到此排他队列的消费者的consumerTag。
- massages_ready:准备发送给客户端的消息个数
- messages_unacknowledged:发送给客户端但未应答的消息个数
- messages:准备发送给客户端和未应答消息的总和
- message_ready_ram:驻留在内存中message_ready的消息个数
- messages_unacknowledged_ram:驻留在内存中messages_unacknowledged的消息个数
- messages_ram:驻留在内存中的消息总数
- messages_persistent:队列中持久化的消息个数,对于非持久化的队列来说个数就是0
- messages_bytes:队列中的所有消息的大小总和。
- messages_bytes_ready:准备发送给客户端的消息的大小总和
- messages_bytes_unacknowledged:发送给客户端但尚未应答的消息的大小总和
- messages_bytes_ram:驻留在内存中的messages_bytes
- messages_bytes_persistent:队列中持久化的messages_bytes
- disk_reads:从队列启动开始,从磁盘中读取该队列的消息总次数
- disk_writes:从队列启动开始,向磁盘队列写入的总次数
- consumer:消费者数目
- consumer_utilisation:队列中的消息能够立刻投递给消费者的比例,介于0到1之间
- memory:Erlang进程消耗的内存字节数
- slave_pids:如果队列时镜像的,列出所有的slave镜像的pid
- synchronised_slave_pids:如果队列时镜像的,列出所有已经同步的slave镜像
- state:队列状态。正常是running,如果队列正常同步数据可能会有
syncing,MsgCount
的状态,如果节点掉线,则队列显示为down
例子如:
$ rabbitmqctl list_queues name durable auto_delte arguments -q
queue1 true false []
queue2 true false []
类似我们查询数据库一样,显示哪些字段的用法
list_exchanges
rabbitmqctl list_exchanges [-p vhost] [exchangeitem]
列举交换器的信息,exchangeitem如下
- name:交换器的名称
- type:交换器的类型
- durable:是否持久化
- auto_delete:是否自动删除
- internal:是否内置
- arguments:其他一些结构化参数
- policy:应用到交换器的策略名称
list_bingdings
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem]
返回绑定关系的详情,bindinginfoitem如下:
- source_name:绑定消息来源的名称
- source_kind:绑定消息来源的类别
- destination_name:绑定消息目的地的名称
- destination_kind:绑定消息目的地的种类
- routing_key:绑定的路由键
- arguments:绑定的参数
list_connections
rabbitmqctl list_connections [conninfoitem]
返回连接的统计信息,conninfoitem如下:
- pid:进程ID
- name:连接的名称
- port:服务器的端口
- host:返回DNS的主机名称,或者IP地址
- peer_port:服务器对端端口。当一个客户端与服务器连接时,这个客户端的端口就是peer_port
- peer_host:对端主机名称
- ssl:是否启动SSL
- ssl_protocol:SSL协议
- ssl_key_exchange:SSL密钥交换算法,如RSA
- ssl_cipher:SSL加密算法
- ssl_hash:SSL哈希算法
- peer_cert_subject:对端的SSL证书的主题
- peer_cert_validity:对端证书的有效期
- state:连接状态
- channels:信道个数
- protocol:AMQP的协议,当前是0,9,1或者0,8,0
- user:与连接相关的用户名
- vhost:与连接相关的vhost名称
- timeout:连接超时的心跳间隔,单位为秒
- frame_max:最大传输的大小,单位是B
- channel_max:此信道的最大数量。如果值为0,表示无线,一般客户端会将0变成65535
- client_prpperties:连接期间的信息属性
- recv_oct:收到的字节数
- recv_cnt:收到的数据包个数
- send_oct:发送的字节数
- send_cnt:发送的数据包个数
- send_pend:发送队列大小
- connected_at:连接建立的时间戳
list_channels
rabbitmqctl list_channels [channelinfoitem]
返回信道信息,channelinfoitem参数如下说明:
- pid:进程ID
- connection:连接进程ID
- name:信道名称
- number:信道的序号
- user:用户名称
- vhost:虚拟主机
- transactional:信道是否处于事务模式
- confirm:信道是否属于publish confirm模式
- consumer_count:信道中的消费者个数
- messages_unacknowledged:已投递但是未被ack的消息个数
- messages_uncommitted:已接收但是未提交事务的消息个数
- acks_uncommitted:已ack收到但是未提交事务的消息个数
- messages_unconfirmed:已发送但是未确认的消息个数
- perfetch_count:新消费者的Qos个数限制
- global_prefetch_count:整个信道Qos个数限制,0表示无上限
list_consumers
列举消费者信息,每行表示已订阅队列的名称、相关信道的进程ID、consumerTag、是否需要消费端确认等
HTTP API接口管理
RabbitMQ提供了API接口的方式来调用管理,此处稍微列举一部分,比较少用到。
/api/queues/vhost/name
这里可以通过RESTFUL的方式,GET/PUT/DELETE/POST四种来CURD队列信息
/api/exchanges/vhost/name
同上,主要是交换器的管理
/api/exchanges/vhost/name/publish
向指定的交换器发送一条信息
/api/vhost/name
管理vhost
以上是关于RabbitMQ研究管理RabbitMQ的主要内容,如果未能解决你的问题,请参考以下文章