RabbitMQ 入门系列(4)— RabbitMQ 启动、停止节点和应用程序、用户管理、权限配置

1. 服务器管理

我们使用 “节点” 来指代 RabbitMQ 实例,当我们谈到 RabbitMQ 节点时指的是 RabbitMQ 应用程序和其所在的 Erlang 节点。

1.1 启动节点

启动节点有以下几种方式

rabbitmq-server start 
或者
service rabbitmq-server start

或者以守护程序的方式在后台运行:

./rabbitmq-server -detached

该命令会同时启动应用程序和 Erlang 节点。

1.2 停止节点

在 RabbitMQ 的安装目录下执行以下命令时,rabbitmqctl 会和本地节点通信并指示其干净的关闭。

rabbitmqctl stop 

该命令会同时关闭应用程序和 Erlang 节点。

1.3 启动应用程序

启动应用程序可输入以下命令:

rabbitmqctl start_app

1.4 停止应用程序

仅停止应用程序可输入以下命令:

rabbitmqctl stop_app

2. 管理用户

RabbitMQ 权限系统使得单个用户可以跨越多个 vhost 进行授权。但是必须创建多个控制条目。

2.1 创建用户

RabbitMQ 配置远程连接

远程访问 RabbitMQ 自己增加一个用户,步骤如下:

  1. 创建一个admin用户:
    sudo rabbitmqctl add_user admin 123123
  1. 设置该用户为administrator角色:
    sudo rabbitmqctl set_user_tags admin administrator
  1. 设置权限
    sudo rabbitmqctl  set_permissions  -p  '/'  admin '.' '.' '.'
  1. 重启rabbitmq服务:
     sudo service rabbitmq-server restart

之后就能用admin用户远程连接rabbitmq server了。

注意:RabbitMQ 默认使用 5672 端口,如果是在云端部署的话需要确认云端的 5672 端口开启。

3. 常用命令汇总

3.1 节点相关

rabbitmq-service start	// 启动 RabbitMQ 节点
rabbitmq-service stop	// 关闭 RabbitMQ 节点
rabbitmq-server restart	// 重启 RabbitMQ 节点

3.2 应用相关

rabbitmqctl start_app	// 启动应用
rabbitmqctl stop_app 	// 停止应用
rabbitmqctl reset		// 重置应用
rabbitmqctl shutdown	// 关闭应用
rabbitmqctl status		// 查看状态

rabbitmqctl reset 将 RabbitMQ 节点重置还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如己配置的用户、vhost 等,以及删除所有的持久化消息。执行 rabbitmqctl reset 命令前必须停止 RabbitMQ 应用(比如先执行 rabbitmqctl stop_app ) 。

3.3 用户相关

在 RabbitMQ 中,用户是访问控制 ( Access Contro l) 的基本单元,且单个用户可以跨越多
个 vhost 进行授权。针对一至多个 vhost,用户可以被赋予不同级别的访问权限,并使用标准的用户名和密码来认证用户。

rabbitmqctl add_user {username} {password}		// 添加用户
rabbitmqctl delete_user {username}		// 删除用户
rabbitmqctl change_password {username} {newpassword}	// 修改密码
rabbitmqctl clear_password {username} 	// 清除用户密码
rabbitmqctl authentiçate_user {username} {password} // 验证用户
rabbitmqctl set_user_tags {username} administrator	// 分配角色,设置用户标签
rabbitmqctl list_users 		// 列出所有用户

将新虚拟主机授权给新用户: rabbitmqctl set_permissions -p vhost_name username ‘.’ '.’ ‘.*’

用户的角色分为 5 种类型:

  • none: 无任何角色。新创建的用户的角色默认为 none。
  • management: 可以访问Web 管理页面
  • policymaker: 包含management 的所有权限,并且可以管理策略(Policy) 和参数(Parameter)。
  • monitoring: 包含 management 的所有权限,并且可以看到所有连接、信道及节点
    相关的信息。
  • administartor: 包含 monitoring 的所有权限,井且可以管理用户、虚拟主机、权限、策略、参数等。administator 代表了最高的权限。

设置角色 rabbitmqctl set_user_tags {username} {tag …}
tag 参数用于设置0 个、1 个或者多个的角色,设置之后任何之前现有的身份都会被删除。

rabbitmqctl set_user_tags  root policymaker , management

设置用户权限 rabbitmqctl set_permissions -p VHostPath admin ConfP WriteP ReadP
查询所有权限 rabbitmqctl list_permissions [-p vhost]
指定用户权限 rabbitmqctl list_user_permissions {user_name}
清除用户权限 rabbitmqctl clear_permissions [-p vhost] {user_name}
其中 vhost 用于设置禁止用户访问的虚拟主机的名称, 默认为"/" ; username 表示禁止访问特定虚拟主机的用户名称。

添加权限: rabbitmqctl set_permissions -p / username “." ".” “.*”
修改用户角色:rabbitmqctl set_user_tags username administrator

权限设置说明:rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
Vhostpath:授予用户访问权限的 vhost 名称,可以设置为默认值,即 vhost 为 “/”。
user:可以访问指定vhost 的用户名。
Conf:一个正则表达式 match 哪些配置资源能够被该用户访问。
Write:一个正则表达式 match 哪些配置资源能够被该用户读写。
Read:一个正则表达式 match 哪些配置资源能够被该用户访问读。

注:可配直指的是队列和交换器的创建及删除之类的操作;可写指的是发布消息;可读指
与消息有关的操作,包括读取消息及清空整个队列等。

3.4 vhost 相关

rabbitmqctl add_vhost  {vhost_name}	// 添加vhost,新增虚拟主机
rabbitmqctl delete_vhost	// 删除vhost
rabbitmqctl list_vhost 		// 列出所有的vhost

3.5 权限相关

rabbitmqctl set_permissions [-p]	// 设置用户对应的权限
rabbitmqctl list_user_permissions	// 列出用户的权限
rabbitmqctl list_permissions [-p] 	// 列出vhost的权限
rabbitmqctl clear_permissions [-p]	// 清除用户的权限

3.6 队列相关

rabbitmqctl list_queues [-p] 		// 列出vhsot中对应的queue
rabbitmqctl list_exchanges [-p]		// 列出vhsot中对应的交换机
rabbitmqctl list_bindings [-p] 		// 列出对应的绑定信息
rabbitmqctl list_connections 		// 列出对应的连接数
rabbitmqctl list_channels 			// 列出对应的信道
rabbitmqctl list_consumers 			// 列出对应的消费者 
rabbitmqctl list_queues -p vhost_test1 //列出queues
rabbitmqctl list_queues -p vhost_test1 name messages consumers memory //查看queues对应统计信息

4. 实践

4.1 使用 docker 创建一个 RabbitMQ 容器

  1. 拉取 RabbitMQ 镜像
wohu@wohu:~$ docker pull rabbitmq
Using default tag: latest
latest: Pulling from library/rabbitmq
7ddbc47eeb70: Pull complete 
c1bbdc448b72: Pull complete 
8c3b70e39044: Pull complete 
45d437916d57: Pull complete 
916459a32f87: Pull complete 
aba97e76a6d7: Pull complete 
6cfc7646d503: Pull complete 
5e8c71984192: Pull complete 
16722d38aada: Pull complete 
b3a7c7a8fb05: Pull complete 
Digest: sha256:3c0ebabfb9e8b53b18d4ee060019718f47df17dc4a333f1ae1715963216216bd
Status: Downloaded newer image for rabbitmq:latest
  1. 创建 RabbitMQ 容器
wohu@wohu:~$ docker run -d --log-opt max-size=100m --restart=always --hostname wohu -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone -p 5672:5672 -p 8081:15672 rabbitmq:latest 
2aca4e39bb8d5d1fd2373740497c72a1e1ec1638ce98f74dc6aec27c554f1ff2

参数说明:

参数含义
–log-opt max-size=100m指定日志文件大小上限
–log-opt max-file=3指定日志文件个数
–hostname wohu更改容器主机名为 wohu,否则默认显示数字和字母的混合
–restart=alwaysdocker 服务重启时,容器能够自动启动
-v /etc/localtime:/etc/localtime让容器共享主机的 localtime
-v /etc/timezone:/etc/timezone让容器共享主机的 timezone
-p 5672:5672将主机 5672 端口映射到容器端口 5672

说明:
docker 日志默认位置在 /var/lib/docker/containers/containeid 目录下面的 containeid-json.log 文件中

  1. 进入 RabbitMQ 容器,添加账户
wohu@wohu:~$ docker exec -ti 2a /bin/bash        
root@wohu:/# rabbitmqctl list_users
Listing users ...
user	tags
guest	[administrator]
root@wohu:/# rabbitmqctl add_user admin 123123
Adding user "admin" ...
root@wohu:/# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
root@wohu:/# rabbitmqctl  set_permissions  -p  '/'  admin '.' '.' '.'
Setting permissions for user "admin" in vhost "/" ...
root@wohu:/# exit
exit
  1. 重启容器,查看是否创建成功
wohu@wohu:~$ docker restart 2a
2a
wohu@wohu:~$ docker exec -ti 2a /bin/bash
root@wohu:/# rabbitmqctl list_vhosts
Listing vhosts ...
name
/
root@wohu:/# rabbitmqctl list_users
Listing users ...
user	tags
admin	[administrator]
guest	[administrator]
  1. 开启 RabbitMQ 页面管理插件
    输入 rabbitmq-plugins list 查看插件列表
root@wohu:/# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@wohu
 |/
[  ] rabbitmq_amqp1_0                  3.8.1
[  ] rabbitmq_auth_backend_cache       3.8.1
[  ] rabbitmq_auth_backend_http        3.8.1
[  ] rabbitmq_auth_backend_ldap        3.8.1
[  ] rabbitmq_auth_backend_oauth2      3.8.1
[  ] rabbitmq_auth_mechanism_ssl       3.8.1
[  ] rabbitmq_consistent_hash_exchange 3.8.1
[  ] rabbitmq_event_exchange           3.8.1
[  ] rabbitmq_federation               3.8.1
[  ] rabbitmq_federation_management    3.8.1
[  ] rabbitmq_jms_topic_exchange       3.8.1
[  ] rabbitmq_management               3.8.1
[  ] rabbitmq_management_agent         3.8.1
[  ] rabbitmq_mqtt                     3.8.1
[  ] rabbitmq_peer_discovery_aws       3.8.1
[  ] rabbitmq_peer_discovery_common    3.8.1
[  ] rabbitmq_peer_discovery_consul    3.8.1
[  ] rabbitmq_peer_discovery_etcd      3.8.1
[  ] rabbitmq_peer_discovery_k8s       3.8.1
[  ] rabbitmq_prometheus               3.8.1
[  ] rabbitmq_random_exchange          3.8.1
[  ] rabbitmq_recent_history_exchange  3.8.1
[  ] rabbitmq_sharding                 3.8.1
[  ] rabbitmq_shovel                   3.8.1
[  ] rabbitmq_shovel_management        3.8.1
[  ] rabbitmq_stomp                    3.8.1
[  ] rabbitmq_top                      3.8.1
[  ] rabbitmq_tracing                  3.8.1
[  ] rabbitmq_trust_store              3.8.1
[  ] rabbitmq_web_dispatch             3.8.1
[  ] rabbitmq_web_mqtt                 3.8.1
[  ] rabbitmq_web_mqtt_examples        3.8.1
[  ] rabbitmq_web_stomp                3.8.1
[  ] rabbitmq_web_stomp_examples       3.8.1
root@wohu:/# 

开启插件 rabbitmq-plugins enable rabbitmq_management

root@wohu:/# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@wohu:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@wohu...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.
  1. 页面访问
    启动成功之后访问 http://ip:8081/#/, 即可看到 RabbitMQ 的管理页面.
  2. 制作镜像
    将添加账户和开启页面管理插件的容器做成一个镜像文件.
wohu@wohu:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                            NAMES
2aca4e39bb8d        rabbitmq:latest     "docker-entrypoint.s…"   3 hours ago         Up 3 hours          4369/tcp, 5671/tcp, 25672/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:8081->15672/tcp   silly_torvalds
wohu@wohu:~$ docker commit -m "add admin account and enable web management" -a "wohu" 2aca4e39bb8d rabbitmq_web
sha256:f8c3c0b1bf6ca6c030d08e08aaa50c1444d01fc46668a5789c43dd87035e5451
wohu@wohu:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rabbitmq_web        latest              f8c3c0b1bf6c        5 seconds ago       150MB
rabbitmq            latest              72469b528c2d        9 days ago          150MB
  1. 将镜像文件保存在本地
wohu@wohu:~$ docker save -o web_rabbitmq.tar  rabbitmq_web
wohu@wohu:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
rabbitmq_web        latest              f8c3c0b1bf6c        About a minute ago   150MB
rabbitmq            latest              72469b528c2d        9 days ago           150MB
wohu@wohu:~$ ls
web_rabbitmq.tar
  1. 在其它机器上再导入该镜像文件,就可以使用已将添加的 admin 账户和 web 管理功能
wohu@wohu:~$ docker load -i web_rabbitmq.tar 
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值