文档,https://www.rabbitmq.com/docs/cli
1.rabbitmqadmin
如何获取rabbitmqadmin
cp /data/ajime/ajime_data/rabbitmq_data/mnesia/rabbit-plugins-expand/rabbitmq_management-3.6.12/priv/www/cli/rabbitmqadmin /usr/local/bin/rabbitmqadmin
[root@beta cli]# chmod +x /usr/local/bin/rabbitmqadmin
#或者
wget http://localhost:15672/cli/rabbitmqadmin
注意运行此脚本需要python2.7
yum install python2.7
[root@beta cli]# head /usr/local/bin/rabbitmqadmin
#!/usr/bin/env python2
cp /data/ajime/ajime_data/rabbitmq_data/mnesia/rabbit-plugins-expand/rabbitmq_management-3.6.12/priv/www/cli/rabbitmqadmin /usr/local/bin/rabbitmqadmin
[root@beta cli]# chmod +x /usr/local/bin/rabbitmqadmin
#或者
wget http://localhost:15672/cli/rabbitmqadmin
注意运行此脚本需要python2.7
yum install python2.7
[root@beta cli]# head /usr/local/bin/rabbitmqadmin
#!/usr/bin/env python2
常用命令
rabbitmqadmin list users #查看用户列表
rabbitmqadmin list vhosts #查看vhosts
rabbitmqadmin list connections ###查看 connections
rabbitmqadmin list exchanges ##查看 exchanges
rabbitmqadmin list bindings ##查看 bindings
rabbitmqadmin list permissions ##查看 permissions
rabbitmqadmin list channels ##查看 channels
rabbitmqadmin list parameters ##查看 parameters
rabbitmqadmin list consumers ##查看consumers
rabbitmqadmin list queues ##查看queues
rabbitmqadmin list policies ##查看policies
rabbitmqadmin list nodes ##查看nodes
rabbitmqadmin show overview ##查看overview
rabbitmqadmin list users #查看用户列表
rabbitmqadmin list vhosts #查看vhosts
rabbitmqadmin list connections ###查看 connections
rabbitmqadmin list exchanges ##查看 exchanges
rabbitmqadmin list bindings ##查看 bindings
rabbitmqadmin list permissions ##查看 permissions
rabbitmqadmin list channels ##查看 channels
rabbitmqadmin list parameters ##查看 parameters
rabbitmqadmin list consumers ##查看consumers
rabbitmqadmin list queues ##查看queues
rabbitmqadmin list policies ##查看policies
rabbitmqadmin list nodes ##查看nodes
rabbitmqadmin show overview ##查看overview
[root@beta cli]# rabbitmqadmin list users
+-------+--------------------------------+--------------------------------------------------+---------------+
| name | hashing_algorithm | password_hash | tags |
+-------+--------------------------------+--------------------------------------------------+---------------+
| admin | rabbit_password_hashing_sha256 | tRq/NfJCRPtzUrooJ70Gdm/fEGFgHsbxASDXXgI8HqxNBn6n | administrator |
| guest | rabbit_password_hashing_sha256 | D5v/uN6uFdOfnnjaUW8btb9hsgVeN+3Y4n8Tvwl6woQpCbWG | administrator |
+-------+--------------------------------+--------------------------------------------------+---------------+
[root@beta cli]# rabbitmqadmin list users
+-------+--------------------------------+--------------------------------------------------+---------------+
| name | hashing_algorithm | password_hash | tags |
+-------+--------------------------------+--------------------------------------------------+---------------+
| admin | rabbit_password_hashing_sha256 | tRq/NfJCRPtzUrooJ70Gdm/fEGFgHsbxASDXXgI8HqxNBn6n | administrator |
| guest | rabbit_password_hashing_sha256 | D5v/uN6uFdOfnnjaUW8btb9hsgVeN+3Y4n8Tvwl6woQpCbWG | administrator |
+-------+--------------------------------+--------------------------------------------------+---------------+
2.系统操作
2.0用户角色
共6中角色
用户 | 说明 |
---|---|
administrator | 超级管理员,可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作 |
monitoring | 可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) |
policymaker | 策略制定者,可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息 |
management | 普通管理者,仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理 |
Impersonator | 模拟者,无法登录管理控制台,因为没有管理者权限 |
none | 无法登陆管理控制台,无任何角色。新创建的用户的角色默认为none |
设置用户角色
rabbitmqctl set_user_tags User Tag
User为用户名, Tag为角色名(对应于administrator,monitoring,policymaker,management
#同时也可以设置多个角色
rabbitmqctl set_user_tags hncscwc monitoring policymaker
rabbitmqctl set_user_tags User Tag
User为用户名, Tag为角色名(对应于administrator,monitoring,policymaker,management
#同时也可以设置多个角色
rabbitmqctl set_user_tags hncscwc monitoring policymaker
2.1用户管理操作
官方文档,https://www.rabbitmq.com/access-control.html
用户权限指的是用户对其所能访问的 VHostPath 的 exchange,queue 的操作权限,包括配置权限,读写权限。配置权限会影响到 exchange,queue 的声明和删除;读写权限影响到从 queue 里取消息,向 exchange 发送消息以及 queue 和 exchange 的绑定 (bind) 操作。例如: 将 queue 绑定到某 exchange 上,需要具有 queue 的可写权限,以及 exchange 的可读权限;向 exchange 发送消息需要具有 exchange 的可写权限;从 queue 里取数据需要具有 queue 的可读权限。详细请参考官方文档中 “How permissions work” 部分
添加用户
语法:rabbitmqctl add_user Username Password
这个不会增加标签
[root@beta cli]# rabbitmqctl add_user han 1234han
Creating user "han"
#增加标签
rabbitmqadmin declare user name=han password=123han tags=administrator
语法:rabbitmqctl add_user Username Password
这个不会增加标签
[root@beta cli]# rabbitmqctl add_user han 1234han
Creating user "han"
#增加标签
rabbitmqadmin declare user name=han password=123han tags=administrator
注意:如果是设置多个角色,管理界面用,分隔,命令用空格分隔
删除用户
[root@beta cli]# rabbitmqctl delete_user han
Deleting user "han"
[root@beta cli]# rabbitmqctl delete_user han
Deleting user "han"
修改用户的密码
语法:rabbitmqctl change_password Username Newpassword
[root@beta cli]# rabbitmqctl change_password han12 han123
Changing password for user "han12"
语法:rabbitmqctl change_password Username Newpassword
[root@beta cli]# rabbitmqctl change_password han12 han123
Changing password for user "han12"
验证用户密码
rabbitmqctl authenticate_user {username} {passwd}
[root@appman ~]# rabbitmqctl authenticate_user han han123
Authenticating user "han" ...
Success
rabbitmqctl authenticate_user {username} {passwd}
[root@appman ~]# rabbitmqctl authenticate_user han han123
Authenticating user "han" ...
Success
授权用户
rabbitmqctl set_user_tags {username} {tag}
#
rabbitmqctl set_user_tags han administrator
rabbitmqctl set_user_tags {username} {tag}
#
rabbitmqctl set_user_tags han administrator
显示用户授权权限
#没有权限显示空
[root@appman ~]# rabbitmqctl list_user_permissions han
Listing permissions for user "han" ...
[root@appman ~]# rabbitmqctl list_user_permissions admin
Listing permissions for user "admin" ...
vhost configure write read
/ .* .* .*
#没有权限显示空
[root@appman ~]# rabbitmqctl list_user_permissions han
Listing permissions for user "han" ...
[root@appman ~]# rabbitmqctl list_user_permissions admin
Listing permissions for user "admin" ...
vhost configure write read
/ .* .* .*
如果没有授权,登陆15672管理界面的时候,则提示,Not management user
所有用户的权限
rabbitmqctl list_permissions
rabbitmqctl list_permissions
查看当前用户列表
[root@beta cli]# rabbitmqctl list_users
Listing users
han12 [administrator]
admin [administrator]
guest [administrator]
#或者格式化输出
[root@beta cli]# rabbitmqadmin list users
+-------+--------------------------------+--------------------------------------------------+---------------+
| name | hashing_algorithm | password_hash | tags |
+-------+--------------------------------+--------------------------------------------------+---------------+
| admin | rabbit_password_hashing_sha256 | tRq/NfJCRPtzUrooJ70Gdm/fEGFgHsbxASDXXgI8HqxNBn6n | administrator |
| guest | rabbit_password_hashing_sha256 | D5v/uN6uFdOfnnjaUW8btb9hsgVeN+3Y4n8Tvwl6woQpCbWG | administrator |
| han12 | rabbit_password_hashing_sha256 | yOWAHIGQVtDI8L6sPn7TGJuDkdphsks7fMPvw2/iz3wxZSxc | administrator |
+-------+--------------------------------+--------------------------------------------------+---------------+
[root@beta cli]#rabbitmqadmin list users name # 查看 users的时候限制字段
# 创建某个项目的专用用户,限制只能访问自己项目的virtual hosts
# rabbitmqctl add_user user_proj your_password
# 赋予management给某个项目的专用用户
# rabbitmqctl set_user_tags user_proj management
# 查看用户与角色列表
# rabbitmqctl list_users
[root@beta cli]# rabbitmqctl list_users
Listing users
han12 [administrator]
admin [administrator]
guest [administrator]
#或者格式化输出
[root@beta cli]# rabbitmqadmin list users
+-------+--------------------------------+--------------------------------------------------+---------------+
| name | hashing_algorithm | password_hash | tags |
+-------+--------------------------------+--------------------------------------------------+---------------+
| admin | rabbit_password_hashing_sha256 | tRq/NfJCRPtzUrooJ70Gdm/fEGFgHsbxASDXXgI8HqxNBn6n | administrator |
| guest | rabbit_password_hashing_sha256 | D5v/uN6uFdOfnnjaUW8btb9hsgVeN+3Y4n8Tvwl6woQpCbWG | administrator |
| han12 | rabbit_password_hashing_sha256 | yOWAHIGQVtDI8L6sPn7TGJuDkdphsks7fMPvw2/iz3wxZSxc | administrator |
+-------+--------------------------------+--------------------------------------------------+---------------+
[root@beta cli]#rabbitmqadmin list users name # 查看 users的时候限制字段
# 创建某个项目的专用用户,限制只能访问自己项目的virtual hosts
# rabbitmqctl add_user user_proj your_password
# 赋予management给某个项目的专用用户
# rabbitmqctl set_user_tags user_proj management
# 查看用户与角色列表
# rabbitmqctl list_users
3.创建虚拟机
rabbitmqctl add_vhost {vhost}
rabbitmqctl add_vhost {vhost}
3.1列出
#列出当前所有vhost的信息
[root@appman ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
/
#列出当前所有vhost的信息
[root@appman ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
/
3.2删除
rabbitmqctl delete_vhost {vhost}
rabbitmqctl delete_vhost {vhost}
3.3授权vhost
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
#设置han在vhost1上的权限,在以test开头的资源上有可配置权
rabbitmqctl set_permissions -p vhost1 han "^test.*" ".*" ".*"
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
#设置han在vhost1上的权限,在以test开头的资源上有可配置权
rabbitmqctl set_permissions -p vhost1 han "^test.*" ".*" ".*"
3.4显示vhost权限
[root@appman ~]# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user configure write read
guest .* .* .*
admin .* .* .*
[root@appman ~]# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user configure write read
guest .* .* .*
admin .* .* .*
3.4清除权限
rabbitmqctl clear_permissions [-p vhost] {username}
rabbitmqctl clear_permissions [-p vhost] {username}
3.5完整案例
- 设置用户权限
rabbitmqctl add_user han han123
rabbitmqctl set_user_tags han administrator
rabbitmqctl set_permissions -p / han .* .* .*
rabbitmqctl list_user_permissions han
rabbitmqctl add_user han han123
rabbitmqctl set_user_tags han administrator
rabbitmqctl set_permissions -p / han .* .* .*
rabbitmqctl list_user_permissions han
4.队列操作
4.1添加queue
#rabbitmqadmin declare queue name=test durable=true
queue declared
## durable=true 代表持久化打开 declare是宣布的意思
#指定vhost添加队列
rabbitmqadmin --vhost=test --username=admin --password=admin declare queue name=test durable=true
#rabbitmqadmin declare queue name=test durable=true
queue declared
## durable=true 代表持久化打开 declare是宣布的意思
#指定vhost添加队列
rabbitmqadmin --vhost=test --username=admin --password=admin declare queue name=test durable=true
4.2查看queues
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
#查看bindings
[root@beta cli]# rabbitmqadmin list bindings
+--------+-------------+-------------+
| source | destination | routing_key |
+--------+-------------+-------------+
| | test | test |
+--------+-------------+-------------+
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
#查看bindings
[root@beta cli]# rabbitmqadmin list bindings
+--------+-------------+-------------+
| source | destination | routing_key |
+--------+-------------+-------------+
| | test | test |
+--------+-------------+-------------+
4.3添加消息到test queue
[root@beta cli]# rabbitmqadmin publish routing_key=test payload="this is a testing"
Message published
##未指定exchange默认 exchange name为空
#查看对列发现test有一条消息
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1 |
+------+----------+
#从test queue消费一条信息
[root@beta cli]# rabbitmqadmin get queue=test requeue=true
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+
| test | | 0 | this is a testing | 17 | string | | False |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+
#requeue=true 这条消息消费后还在,反之如果为false消费后消息就不在了
[root@beta cli]# rabbitmqadmin publish routing_key=test payload="this is a testing"
Message published
##未指定exchange默认 exchange name为空
#查看对列发现test有一条消息
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1 |
+------+----------+
#从test queue消费一条信息
[root@beta cli]# rabbitmqadmin get queue=test requeue=true
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+
| test | | 0 | this is a testing | 17 | string | | False |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+
#requeue=true 这条消息消费后还在,反之如果为false消费后消息就不在了
4.4删除队列
[root@beta cli]# rabbitmqadmin delete queue name=test
queue deleted
#没有清理之前
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1 |
+------+----------+
#清除队列消息内容
rabbitmqadmin purge queue name=队列名
或者
rabbitmqctl -q purge_queue queue_name
[root@beta cli]# rabbitmqadmin purge queue name=test
queue purged
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
[root@beta cli]# rabbitmqadmin delete queue name=test
queue deleted
#没有清理之前
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1 |
+------+----------+
#清除队列消息内容
rabbitmqadmin purge queue name=队列名
或者
rabbitmqctl -q purge_queue queue_name
[root@beta cli]# rabbitmqadmin purge queue name=test
queue purged
[root@beta cli]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
手动清空所有队列消息
cd /var/lib/rabbitmq/mnesia/rabbit@连接账户名/queues # 清空该目录下所有文件即可
策略删除数据
rabbitmqctl set_policy deleter ".*" '{"expires":1}' --apply-to queues
rabbitmqctl clear_policy deleter
rabbitmqctl set_policy deleter ".*" '{"expires":1}' --apply-to queues
rabbitmqctl clear_policy deleter
通过创建一个policy,该policy名字为deleter,针对所有名字符合”.*”正则表达式的队列,设置他们的expires属性为1。1s之后清理这个policy,以免影响之后的正常使用
4.5队列模式
RabbitMQ Simple Queue 模式(简单队列)
简单队列模式下,每条消息只会被一个消费者所接收,不存在多个消费者接收到同一条消息的情况,而且不管有多少个消费者,默认情况下服务端都会以轮询分发(round-robin)的方式确保每个消费者接收到的消息数量是一样的
RabbitMQ Work Queue 模式(工作队列)
工作队列模式下,每条消息只会被一个消费者所接收,不存在多个消费者接收到同一条消息的情况;同时工作队列模式可以使用公平分发(fair dispatch)的方式来发送消息,特点是处理能力强的消费者可以接收到更多的消息(能者多劳),这也是与简单队列模式相比较不同的地方。当使用公平分发时,消费者可调用 basicQos()方法,同时需要手动确认消息(ACK 机制)
RabbitMQ Fanout 模式(发布 / 订阅)
单个生产者可以对应多个消费者,每个消费者都有自己的队列,同一条消息可以被多个消费者接收。所有发送到 Fanout Exchange 的消息都会被转发到与该 Exchange 绑定 (Binding) 的所有 Queue 上。Fanout Exchange 不需要额外处理 RouteKey,只需要简单地将队列绑定到 Exchange 上,这样发送到 Exchange 的消息都会被转发到与该交换机绑定的所有队列上,作用类似子网广播,每台子网内的主机都获得了一份复制的消息,因此 Fanout Exchange 转发消息是最快的
RabbitMQ Direct 模式(路由)
单个生产者可以对应多个消费者,每个消费者都有自己的队列,同一条消息可以被多个消费者接收。所有发送到 Direct Exchange 的消息会被转发到 RouteKey 中指定的 Queue 上。消息传递时,RouteKey 必须完全匹配,才会被队列接收,否则该消息会被抛弃
RabbitMQ Topic 模式(通配符)
单个生产者可以对应多个消费者,每个消费者都有自己的队列,同一条消息可以被多个消费者接收。所有发送到 Topic Exchange 的消息会被转发到指定 Topic 的 Queue 上,Exchange 会将 RouteKey 和某个 Topic 进行模糊匹配,此时队列需要绑定一个 Topic。RouteKey 可以使用通配符进行模糊匹配,符号”#” 表示匹配一个或多个词,符号”” 表示匹配不多不少一个词。因此”log.#” 能够匹配到”log.info.oa”,但是”log.” 只会匹配到”log.error”,所以 Topic Exchange 的使用非常灵活
5.交换机
# 列出所有交换机
# rabbitmqctl list_exchanges
# 列出所有绑定
# rabbitmqctl list_bindings
# 列出所有交换机
# rabbitmqctl list_exchanges
# 列出所有绑定
# rabbitmqctl list_bindings
5.0AMQP 简介
官方文档,https://www.rabbitmq.com/tutorials/amqp-concepts.html
RabbitMQ 是实现了 AMQP 协议的消息中间件,所以说下面讲到这些概念不仅限于RabbitMQ,所有实现AMQP 协议的消息中间件都具备这些
AMQP 模型图如下
**Publisher(发布者)**和 **Consumer(消费者)**可以理解为是我们的应用程序
Exchange(交换机),我们的Publisher 会将消息先推送到Exchange ,Exchange 类似邮局,他会将消息再路由到 **Queue(队列)**中,Queue会将消息推送给Consumer
Exchange 和 Queue 之间通过 **Binding (绑定)**将两者关联到一起,一个Exchange 可以绑定多个Queue,一个Queue 可以绑定多个Exchange
5.1Exchange
刚刚我们说Exchange类似邮局。邮局的话,当然会有很多的邮递方式,所以我们的Exchange有多种类型,每种类型都有自己的策略
AMQP 提供四种Exchange类型
name | 默认预设名 |
---|---|
Direct exchange | (Empty string) and amq.direct |
Fanout exchange | amq.fanout |
Topic exchange | amq.topic |
Headers exchange | amq.match (and amq.headers in RabbitMQ) |
Direct Exchange type(直连)
所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue
注意:Direct模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行任何绑定(binding)操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃
Direct Exchange基于RoutingKey 将消息传递到队列
// 第一个参数为Exchange,第二个参数就是RoutingKey
rabbitTemplate.convertAndSend("user_exchange", "user_routingKey", message);
// 绑定的时候 也会关联一个RoutingKey
BindingBuilder.bind(queue()).to(userExchange()).with("user_routingKey")
// 第一个参数为Exchange,第二个参数就是RoutingKey
rabbitTemplate.convertAndSend("user_exchange", "user_routingKey", message);
// 绑定的时候 也会关联一个RoutingKey
BindingBuilder.bind(queue()).to(userExchange()).with("user_routingKey")
重点:routing key与队列queues 的key保持一致,即可以路由到对应的queue中
Default Exchange type
Default Exchange 其实是AMQP中预先声明的,并且它属于 Direct Exchange,通常来说每个Exchange都会有自己的名,Default Exchange 的名是 ""
.
他有一个特殊的属性,当你手动创建一个队列时,MQ会自动将这个队列绑定到Default Exchange 上,绑定时 RoutingKey 与队列名称相同
// 声明一个 Queue,这个时候我们不主动Binding的话,test_queue 会和Default Exchange 绑定,此时 routingKey = test_queue
Queue queue = new Queue("test_queue");
// 向默认交换机发布消息
rabbitTemplate.convertAndSend("", "test_queue", message);
// 声明一个 Queue,这个时候我们不主动Binding的话,test_queue 会和Default Exchange 绑定,此时 routingKey = test_queue
Queue queue = new Queue("test_queue");
// 向默认交换机发布消息
rabbitTemplate.convertAndSend("", "test_queue", message);
Fanout Exchange type
- 不处理路由键,只需要简单的将队里绑定到交换机上
- 发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
- Fanout交换机转发消息是最快的
Fanout Exchange 很简单,适合发布订阅场景。他不使用RoutingKey,他将消息路由到所有与其绑定的队列
Topic Exchange type
- 所有发送到Topic Exchange的消息被转发到所有管线RouteKey中指定Topic的Queue上
- Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个Topic
Topic Exchange 又是基于RoutingKey来路由转发的,但是有些不同
在使用 Topic 的时候,routingKey 可以是 *.orange.*
,lazy.#
这种表达式
*
(星) 代表一个词.#
(hash) 代表0或多个词
案例,
log.# 能够匹配到 log.info.oa
log.* 只会匹配到 log.erro
log.# 能够匹配到 log.info.oa
log.* 只会匹配到 log.erro
同理,当发布消息时的 routingKey 与其匹配时,会路由到相应的队列
Headers Exchange type
基于Header中的属性来匹配路由,由于不是很常用
5.2Bingding
- Exchange和Exchange、Queue之间的连接关系
- Bingding可以包含RoutingKey或者参数
5.3Queue——消息队列
- 消息队列,实际存储消息数据
- Durability:是否持久化,Durable:是 ,Transient:否
- Auto delete:如选yes,代表当最后一个监听被移除之后,该Queue会自动被删除
5.4Message
- 服务器与应用程序之间传送的数据
- 本质上就是一段数据,由Properties和Payload(Body)组成
- 常用属性:delivery mode、headers(自定义属性)
5.5Virtual Host
- 虚拟地址,用于进行逻辑隔离,最上层的消息路由
- 一个Virtual Host里面可以有若干个Exchange和Queue
- 同一个Virtual Host里面不能有相同名称的Exchange或Queue
6.权限
RabbitMQ权限分类:
- 读:有关消费消息的任何操作,包括清除整个队列(需要绑定操作成功)
- 写:发布消息(需要绑定操作成功)
- 配置:队列和交换器的创建和删除
rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read}
Vhostpath:虚拟主机,表示该用户可以访问那台虚拟主机;
user:用户名。
Conf:一个正则表达式match哪些配置资源能够被该用户访问。
Write:一个正则表达式match哪些配置资源能够被该用户设置。
Read:一个正则表达式match哪些配置资源能够被该用户访问
rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read}
Vhostpath:虚拟主机,表示该用户可以访问那台虚拟主机;
user:用户名。
Conf:一个正则表达式match哪些配置资源能够被该用户访问。
Write:一个正则表达式match哪些配置资源能够被该用户设置。
Read:一个正则表达式match哪些配置资源能够被该用户访问
rabbitmqctl list_queues:查看所有队列信息
rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)
rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的
rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用)
rabbitmqctl force_reset:作用和rabbitmqctl reset一样,区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后的手段
rabbitmqctl status:节点状态
rabbitmqctl add_user username password:添加用户
rabbitmqctl list_users:列出所有用户
rabbitmqctl list_user_permissions username:列出用户权限
rabbitmqctl change_password username newpassword:修改密码
rabbitmqctl list_permissions -p vhostpath:列出虚拟主机上的所有权限
rabbitmqctl clear_permissions -p vhostpath username:清除用户权限
rabbitmqctl -p vhostpath purge_queue blue:清除队列里的消息
rabbitmqctl delete_user username:删除用户
rabbitmqctl delete_vhost vhostpath:删除虚拟主机
rabbitmqctl list_queues:查看所有队列信息
rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)
rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的
rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用)
rabbitmqctl force_reset:作用和rabbitmqctl reset一样,区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后的手段
rabbitmqctl status:节点状态
rabbitmqctl add_user username password:添加用户
rabbitmqctl list_users:列出所有用户
rabbitmqctl list_user_permissions username:列出用户权限
rabbitmqctl change_password username newpassword:修改密码
rabbitmqctl list_permissions -p vhostpath:列出虚拟主机上的所有权限
rabbitmqctl clear_permissions -p vhostpath username:清除用户权限
rabbitmqctl -p vhostpath purge_queue blue:清除队列里的消息
rabbitmqctl delete_user username:删除用户
rabbitmqctl delete_vhost vhostpath:删除虚拟主机
6.1权限
[root@beta mnesia]# rabbitmqctl list_permissions
Listing permissions in vhost "/"
admin .* .* .*
guest .* .* .*
[root@beta mnesia]# rabbitmqctl list_permissions
Listing permissions in vhost "/"
admin .* .* .*
guest .* .* .*
- 为用户添加权限
语法:rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*"
rabbitmqctl set_permissions -p / developer ".*" ".*" ".*"
-p / :表示对/ 虚拟主机设置权限,如何省略vhost,默认为“/”虚拟主机
developer:对developer用户设置权限
后面的三个".*"分别对应配置、写、读的权限
“.*”为正则表达式,指代所有权限,".*"意味着匹配所有交换器和队列。这样就允许developer用户对/ 虚拟主机的所有队列和交换器执行配置、写、读命令
语法:rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*"
rabbitmqctl set_permissions -p / developer ".*" ".*" ".*"
-p / :表示对/ 虚拟主机设置权限,如何省略vhost,默认为“/”虚拟主机
developer:对developer用户设置权限
后面的三个".*"分别对应配置、写、读的权限
“.*”为正则表达式,指代所有权限,".*"意味着匹配所有交换器和队列。这样就允许developer用户对/ 虚拟主机的所有队列和交换器执行配置、写、读命令
# rabbitmqctl set_permissions -p / aaa "" "check-.*" ".*"
Setting permissions for user "aaa" in vhost "/" ...
对“/”虚拟主机赋予 aaa用户不能配置,限制只能对以“check-”开头的队列和交换器写操作,对所有队列和交换器可读的操作的权限
# rabbitmqctl set_permissions -p / aaa "" "check-.*" ".*"
Setting permissions for user "aaa" in vhost "/" ...
对“/”虚拟主机赋予 aaa用户不能配置,限制只能对以“check-”开头的队列和交换器写操作,对所有队列和交换器可读的操作的权限
查看
指定vhostpath)所有用户的权限
[root@beta ~]# rabbitmqctl list_permissions -p /
Listing permissions in vhost "/"
admin .* .* .*
guest .* .* .*
[root@beta ~]# rabbitmqctl list_permissions -p /
Listing permissions in vhost "/"
admin .* .* .*
guest .* .* .*
指定用户的权限
[root@beta ~]# rabbitmqctl list_user_permissions guest
Listing permissions for user "guest"
/ .* .* .*
[root@beta ~]# rabbitmqctl list_user_permissions guest
Listing permissions for user "guest"
/ .* .* .*
6.2清除用户权限
rabbitmqctl clear_permissions -p [vhost_name] [user_name]
[root@beta ~]# rabbitmqctl clear_permissions han
Clearing permissions for user "han" in vhost "/"
rabbitmqctl clear_permissions -p [vhost_name] [user_name]
[root@beta ~]# rabbitmqctl clear_permissions han
Clearing permissions for user "han" in vhost "/"
6.3虚拟主机
#列出所有虚拟主机
[root@beta ~]# rabbitmqctl list_vhosts
Listing vhosts
/
han_test
#创建虚拟主机
rabbitmqctl add_vhost vhostpath
[root@beta ~]# rabbitmqctl add_vhost han_test
Creating vhost "han_test"
#删除虚拟主机
[root@beta ~]# rabbitmqctl delete_vhost han_test
Deleting vhost "han_test"
#列出所有虚拟主机
[root@beta ~]# rabbitmqctl list_vhosts
Listing vhosts
/
han_test
#创建虚拟主机
rabbitmqctl add_vhost vhostpath
[root@beta ~]# rabbitmqctl add_vhost han_test
Creating vhost "han_test"
#删除虚拟主机
[root@beta ~]# rabbitmqctl delete_vhost han_test
Deleting vhost "han_test"
7.MQ消息迁移
# 首先在来源的MQ集群开启插件
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
# 首先在来源的MQ集群开启插件
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
安装好rabbitmq_shovel和rabbitmq_shovel_management两个插件之后,就可以在rabbitmq的管理页面查看到这两个插件,首先创建一个shovel.填入的信息主要包括要同步的vhost名称,起一个名字,来源mq服务器地址和队列,目标mq服务器地址和队列,其中要有对vhost授权的账户和密码。目标MQ集群要提前创建好vhost,配置的授权账户和密码,包括队列等
有一个插件Federation,这个插件一般用于实时同步消息的