vhost
RabbitMQ 中有一个概念叫做多租户:
我们安装一个 RabbitMQ 服务器,每一个 RabbitMQ 服务器都能创建出许多虚拟的消息服务器,这些虚拟的消息服务器就是我们所说的虚拟主机(virtual host),一般简称为 vhost。
本质上,每一个 vhost 都是一个独立的小型 RabbitMQ 服务器,这个 vhost 中会有自己的消息队列、消息交换机以及相应的绑定关系等等,并且拥有自己独立的权限,不同的 vhost 中的队列和交换机不能互相绑定,这样技能保证运行安全又能避免命名冲突。
我们并不需要特别的去看待 vhost,他就跟普通的物理 RabbitMQ 一样,不同的 vhost 能够提供逻辑上的分离,确保不同的应用消息队列能够安全独立运行。
要我来说,我们该怎么看待 vhost 和 RabbitMQ 的关系呢?RabbitMQ 相当于一个 Excel 文件,而 vhost 则是 Excel 文件中的一个个 sheet,我们所有的操作都是在某一个 sheet 上进行操作。
命令行创建vhost
#创建vhost
#查看vhost
rabbitmqctl add_vhost myvh
rabbitmqctl list_vhosts
#删除vhost,当删除vhost的时候,与vhost相关的消息列队,交换机以及绑定关系等,统统都会被删除
rabbitmqctl delete_vhost myvh
#给用户设置vhost
rabbitmqctl set_permissions -p myvh guest ".*" ".*" ".*"
含义如下:
- 用户在所有资源上都拥有可配置权限(创建/删除消息队列、创建/删除交换机等)。
- 用户在所有资源上都拥有写权限(发消息)。
- 用户在所有资源上都拥有读权限(消息消费,清空队列等)。
#禁止用户访问vhost
rabbitmqctl clear_permissions -p myvh guest
用户管理
#创建用户
rabbitmqctl add_user javaboy 123
#修改用户
rabbitmqctl change_password javaboy 123456
#验证用户,密码
rabbitmqctl authenticate_user javaboy 123456
#查询当前所有用户
rabbitmqctl list_users
rabbitmqadmin
- 列出 exchanges, queues, bindings, vhosts, users, permissions, connections and channels。
- 创建和删除 exchanges, queues, bindings, vhosts, users and permissions。
- 发布和获取消息,以及消息详情。
- 关闭连接和清空队列。
- 导入导出配置。
相关操作
rabbitmqadmin list exchanges
查看所有的列队
#查看列队
rabbitmqadmin list queues
#查看bind
rabbitmqadmin list bindings
#查看虚拟主机
rabbitmqadmin list vhosts
#查看所有用户信息
rabbitmqadmin list users
#查看权限信息
rabbitmqadmin list permissions
#查看连接信息
rabbitmqadmin list connections
#查看通道信息
rabbitmqadmin list channels
操作举例
#创建一个交换机,名为 javaboy-exchange
rabbitmqadmin declare exchange name=javaboy-exchange durable=true auto_delete=false type=direct
#创建一个列队
rabbitmqadmin declare queue name=javaboy-queue durable=true auto_delete=false
#创建一个binding,将列队绑定起来
#source:源,其实就是指交换机。 destination:目标,其实就是指消息队列。 routing_key:这个就是路由的 key
rabbitmqadmin declare binding source=javaboy-exchange destination=javaboy-queue routing_key=javaboy-routing
#发送消息
rabbitmqadmin publish routing_key=javaboy-queue payload="hello javaboy"
#查看消息
rabbitmqadmin get queue=javaboy-queue
#清空列队
rabbitmqadmin purge queue name=javaboy-queue
详细命令