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_queueslist_exchangeslist_bindingslist_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的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 使用哪个云? [关闭]

RabbitMQ学习记录- 消息队列存储机制源码分析

RabbitMQ入门研究

RabbitMQ入门研究

RabbitMQ通过shovel插件迁移数据

RabbitMQ介绍3 - 运行和管理RabbitMQ