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 自己增加一個用戶,步驟如下:
- 創建一個admin用戶:
sudo rabbitmqctl add_user admin 123123
- 設置該用戶為administrator角色:
sudo rabbitmqctl set_user_tags admin administrator
- 設置權限
sudo rabbitmqctl set_permissions -p '/' admin '.' '.' '.'
- 重啟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 容器
- 拉取 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
- 創建 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=always | docker 服務重啟時,容器能夠自動啟動 |
| -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 文件中
- 進入 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
- 重啟容器,查看是否創建成功
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]
- 開啟 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_managementrabbitmq_management_agentrabbitmq_web_dispatch
Applying plugin configuration to rabbit@wohu...
The following plugins have been enabled:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatchstarted 3 plugins.
- 頁面訪問
啟動成功之后訪問 http://ip:8081/#/, 即可看到 RabbitMQ 的管理頁面. - 制作鏡像
將添加賬戶和開啟頁面管理插件的容器做成一個鏡像文件.
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
- 將鏡像文件保存在本地
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
- 在其它機器上再導入該鏡像文件,就可以使用已將添加的 admin 賬戶和 web 管理功能
wohu@wohu:~$ docker load -i web_rabbitmq.tar
總結
以上是生活随笔為你收集整理的RabbitMQ 入门系列(4)— RabbitMQ 启动、停止节点和应用程序、用户管理、权限配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ 入门系列(3)— 生产
- 下一篇: Python+OpenCV 图像处理系列