RabbitMQ是一个开源的消息队列软件(消息代理),它实现了高级消息队列协议(AMQP)。它主要用于应用程序之间或者同一应用的不同组件之间传递消息,实现了解耦、非阻塞的服务架构。
安装
1 2 3 4 5 6 7 8
| # 启动rabbitmq-server systemctl start rabbitmq-server # 查询rabbitmq-server systemctl status rabbitmq-server # 查看服务器状态 rabbitmqctl status # 访问本地管理界面 http://0.0.0.0:15672/#/
|
虚拟主机VHost
虚拟主机(vhost)是一个逻辑上的分组,它允许你在同一个RabbitMQ实例中创建多个独立的工作环境。每个vhost可以拥有自己的队列、交换机、绑定等,并且可以设置不同的权限来控制不同用户对这些资源的访问。使用vhost可以帮助你实现资源的分离,比如你可以为不同的应用或不同的开发环境(如测试环境和生产环境)配置不同的vhost,从而避免它们之间的相互影响。
默认情况下,RabbitMQ提供了一个名为“/”的vhost,所有新创建的用户如果没有特别指定的话,都会被分配到这个默认的vhost中。
1 2 3 4 5 6
| # 列出所有虚拟主机 rabbitmqctl list_vhosts # 创建新的虚拟主机 rabbitmqctl add_vhost <vhost> # 删除虚拟主机 rabbitmqctl delete_vhost <vhost>
|
用户User
用户(user)是指连接到RabbitMQ服务器并进行消息发送和接收的实体,它可以是人类用户和其他软件系统或服务。每个用户都需要分配一个或多个角色,这些角色决定了用户可以在特定的vhost中执行哪些操作。例如,用户可能只被授予对某个vhost中的某些队列的读取权限,而没有写入或其他管理权限。
用户与vhost的关系通过权限设置来定义。你可以为每个用户在每个vhost上设置详细的权限,以控制该用户能够执行的操作类型(如配置、写入、读取)。
1 2 3 4 5 6 7 8 9 10 11 12
| # 列出所有用户 rabbitmqctl list_users # 添加新用户 rabbitmqctl add_user <user> <passwd> # 设置用户标签/角色 rabbitmqctl set_user_tags <user> administrator # 查看用户的权限 rabbitmqctl list_user_permissions <user> # 设置用户在指定 vhost 的权限 rabbitmqctl set_permissions -p <vhost> <user> ".*" ".*" ".*" # 删除用户 rabbitmqctl delete_user <username>
|
Docker
1 2 3
| # rabbitmq: 基础镜像,仅包含 RabbitMQ 核心功能。 # rabbitmq:management: 包含 RabbitMQ 的管理插件(提供 Web 管理界面)。 docker pull rabbitmq:management
|
执行如下命令启动容器:
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -v /path/to/rabbitmq-data:/var/lib/rabbitmq \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=password \ rabbitmq:management # 比如 $ docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v ~/rabbitmq-data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password rabbitmq:management $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fc42faea6833 rabbitmq:management "docker-entrypoint.s…" 2 seconds ago Up 1 second 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp rabbitmq
|
参数说明:
- -d: 后台运行容器。
- --name rabbitmq: 为容器指定名称(这里是 rabbitmq)。
- -p 5672:5672: 映射 RabbitMQ 的 AMQP 协议端口(默认 5672)到主机。
- -p 15672:15672: 映射 RabbitMQ 的管理界面端口(默认 15672)到主机。
- -e RABBITMQ_DEFAULT_USER=admin: 设置 RabbitMQ 的默认用户名为 admin。
- -e RABBITMQ_DEFAULT_PASS=password: 设置 RabbitMQ 的默认密码为 password。
- /path/to/rabbitmq-data: 主机上的目录,用于存储 RabbitMQ 的持久化数据。
- /var/lib/rabbitmq: 容器内的 RabbitMQ 数据目录。

常见问题
- 多vhost 绑定:一个用户可以绑定到多个虚拟主机,这意味着该用户可以根据需要访问不同的工作环境,例如开发环境和测试环境。
- 共享vhost:一个虚拟主机也可以由多个用户共享,这允许根据团队成员的角色分配不同的访问级别。