Skip to content

文档,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 # 清空该目录下所有文件即可

策略删除数据

shell
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 exchangeamq.fanout
Topic exchangeamq.topic
Headers exchangeamq.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权限分类

  • 读:有关消费消息的任何操作,包括清除整个队列(需要绑定操作成功)
  • 写:发布消息(需要绑定操作成功)
  • 配置:队列和交换器的创建和删除
bash
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,这个插件一般用于实时同步消息的