rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令
文章目錄
- 一、RabbitMQ安裝
- 1.1 二進制安裝
- 1.2 rabbitmqctl工具
- 1.3 docker安裝
- 二、rabbitmq基礎命令
- 2.1 多租戶與權限類
- 2.1.1 創建虛擬主機
- 2.1.2 查看虛擬主機信息
- 2.1.3 刪除虛擬主機
- 2.1.4 給用戶授權
- 2.1.5 清除用戶權限
- 2.1.6 查看權限
- 2.2 用戶管理類
- 2.2.1 創建用戶
- 2.2.2 查看用戶
- 2.2.3 刪除用戶
- 2.2.4 用戶指定角色
- 2.2.5 更改用戶密碼
- 2.2.6 清除用戶密碼
- 2.2.7 密碼驗證用戶
- 2.3 插件使用類
- 2.3.1 啟動插件
- 2.3.2 關閉插件
- 2.3.3 查看插件使用情況
- 2.4 應用管理類
- 2.4.1 啟動rabbitmq服務
- 2.4.1.1 前臺啟動
- 2.4.1.2 后臺啟動
- 2.4.2 關閉rabbitmq服務
- 2.4.2.1 指定pid文件阻塞進程關閉(stop)
- 2.4.2.2 直接阻塞進程關閉(shutdown)
- 2.4.3 只停止應用服務
- 2.4.3 啟動應用服務
- 2.4.4 等待應用服務啟動
- 2.4.5 先停止應用再重置rabbitmq服務狀態
- 2.4.6 強制重置rabbitmq服務狀態
- 2.4.7 輪換日志文件(已棄用)
- 2.4.8 生成HiPE編譯代碼.beam文件(已棄用)
一、RabbitMQ安裝
1.1 二進制安裝
需要提前下載兩個安裝包,兩個包的版本必須對應。
- Erlang官網
- RabbitMQ官網
- 安裝Erlang環境,注意版本要與RabbitMQ版本對應。
- 安裝包準備。
- wxWidgets官網
- 前臺運行方式啟動
- 后臺運行
14. 創建用戶
15. 指定角色
用戶角色5種類型:
- administator代表了最高的權限。
16. 用戶授權。
命令格式:rabbitmqctl set_permissions [-p vhosts] {user} {conf} {write} {read}
- [-p vhost]:授予用戶訪問權限的 vhost 名稱,如果不寫默認為 /。
- user:指定哪個用戶可以訪問該vhost的權限。
- conf:用戶在哪些資源上擁有可配置權限(支持正則表達式)。
- write:用戶在哪些資源上擁有寫權限(支持正則表達式)。
- read:用戶在哪些資源上擁有讀權限(支持正則表達式)。
1.2 rabbitmqctl工具
rabbitmqctl工具作用:
- 是用來管理 RabbitMQ中間件的命令行工具,通過連接各個RabbitMQ節點來執行所有操作。
- 如果有節點沒有運行,將顯示診斷信息: 不能到達或因不匹配的 Erlangcookie 而拒絕連接
工具的標準語法:
- rabbitmgctl [-n node] [-t timeout] [-q] {command) [command options…]
- [ ]表示可選參數,{ }表示必選參數。
- [-n node]:默認節點是“rabbit@hostname”,hostname是主機名稱。在一個名為“node.hidden.com’的主機上,RabbitMQ節點的名稱通常是 rabbit@node,可以在RABBITMQ NODENAME 參數在啟動時設置。
- [-q]:表示來啟用 quiet 模式,這樣可以屏蔽一些消息的輸出。默認不開啟 quiet 模式。
- [-t timeout]:表示操作超時時間 (秒為單位),只適用于“list xxx”類型的命令,默認是無窮大。
- 測試效果
1.3 docker安裝
1、先把前面二進制安裝的rabbitmq服務關閉,防止端口沖突。
2、docker安裝。指定容器名為myrabbit,新增一個賬戶qingjun1,密碼為123456,并開放一些端口。
[root@localhost Python-3.8.6]# docker run -d --name myrabbit -e RABBITMQ_DEFAULT_USER=qingjun1 -e RABBITMQ_DEFAULT_PASS=123456 -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:3-management[root@localhost Python-3.8.6]# docker ps|grep myrabbit 03fecc33c9e6 rabbitmq:3-management "docker-entrypoint.s…" 39 seconds ago Up 38 seconds 4369/tcp, 0.0.0.0:1883->1883/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 0.0.0.0:15672->15672/tcp, 0.0.0.0:25672->25672/tcp, 0.0.0.0:61613->61613/tcp, 15691-15692/tcp myrabbit3、登錄頁面
二、rabbitmq基礎命令
在上面給用戶授權時,命令中有一個新出現的詞,vhost。那它是什么呢?為什么命令中會需要指向它,我們來簡單了解一下。
- vhost的由來?
- 當需要有很多個用戶時,但我們做不到給不同的用戶分配可以訪問哪些交換器、隊列的權限。比如exchangeA 和queueA 只能讓用戶A訪問,exchangeB 和queueB 只能讓用戶B訪問,想要達到這種需求,該怎么實現呢?
- 可以給exchangeA 和queueA創建一個vhostA,為exchangeB 和queueB 創建vhostB,這樣就隔離開來了。
- 所以說,vhost是rabbitmq分配權限的最小細粒度。vhost中包含許多的exchanges,queues,bingdings)。
- vhost是什么?
- 每一個 RabbitMQ服務器都能創建虛擬的消息服務器,我們稱之為虛擬主機(virtual host),簡稱為 vhost。
- 每一個 vhost 本質上是一個獨立的小型 RabbitMQ服務器,擁有自己獨立的隊列、交換器及綁定關系等,并且它擁有自己獨立的權限。
- vhost 是 AMQP 概念的基礎,客戶端在連接的時候必須制定一個 vhost。
- RabbitMQ默認創建的 vhost 為“/”,如果不需要多個 host 或者對 vhost 的概念不是很理解,那么用這個默認的vhost 也是非常合理的,使用默認的用戶名 guest 和密碼 guest 就可以訪問它。
- vhost的作用?
- vhost 就像是虛擬機與物理服務器一樣,它們在各個實例間提供邏輯上的分離,為不同程序安全保密地運行數據,它既能將同一個RabbitMQ中的眾多客戶區分開,又可以避免隊列和交換器等命名沖突。
- vhost 之間是絕對隔離的,無法將 vhost1 中的交換器與 host2 中的隊列進行綁定,這樣既保證了安全性,又可以確??梢浦残?。
- RabbitMQ中的授權是針對誰來說的?為什么?
- 在 RabbitMO 中,權限控制則是以 vhost 為單位的。
- 當創建一個用戶時,用戶通常會被指派給至少一個 vhost,并且只能訪問被指派的 vhost 內的隊列、交換器和綁定關系等。因此,RabbitMQ中的授予權限是指在 vhost 級別對用戶而言的權限授予。
2.1 多租戶與權限類
2.1.1 創建虛擬主機
命令格式:rabbitmqctl add_vhost {vhost)
# 創建一個名為wuhan的vhost。 [root@localhost rabbitmq]# rabbitmqctl add_vhost wuhan2.1.2 查看虛擬主機信息
命令格式: rabbitmqctl list_vhosts [vhostinfoitem…]來羅列當前vhost 的相關信息。目前 vhostinfoitem 的取值有 2個。
- name: 表示 vhost 的名稱。
- tracing: 表示是否使用了 RabbitMQ的 trace 功能。
初識tracing插件:
- 對,你沒看錯,它是個插件,可以用命令手動開啟關閉它,打開時在查詢主機狀態顯示為"ture",關閉時顯示狀態為“false”。
- 開啟插件能跟蹤 RabbitMQ 中消息的流入流出情況,會對流入流出的消息進行封裝,然后將封裝后的消息日志存入相應的 trace 文件之中。
- rabbitmq tracing 插件相當于 Firehose 的 GUI 版本,至于Firehose是啥東東?什么作用?咱們后面會談到。
2.1.3 刪除虛擬主機
命令格式: rabbitmqctl delete_vhost {vhost},其中大括號里面的參數表示 vhost 的名稱。
- 刪除一個 vhost 同時也會刪除其下所有的隊列、交換器、綁定關系、用戶權限、參數和策略等信息。
2.1.4 給用戶授權
看,又繞回來了,授權命令咱們再鞏固一遍。
命令格式: rabbitmgctl set_permissions [-p vhost] {user]{conf}{write}{read}。
- vhost:授予用戶訪問權限的 vhost 名稱,可以設置為默認值,即 vhost 為“/”user: 可以訪問指定 vhost 的用戶名。
- conf:一個用于匹配用戶在哪些資源上擁有可配置權限的正則表達式。可配置指的是隊列和交換器的創建及刪除之類的操作。
- write:一個用于匹配用戶在哪些資源上擁有可寫權限的正則表達??蓪懼傅氖前l布消息。
- read:一個用于匹配用戶在哪些資源上擁有可讀權限的正則表達式。可讀指與消息有關的操作,包括讀取消息及清空整個隊列等。
2.1.5 清除用戶權限
命令格式:rabbitmgctl clear_permissions [-p vhost] {username}。
- vhost:指定禁止用戶訪問的虛擬主機的名稱,默認為“1”。
- username:指定禁止訪問特定虛擬主機的用戶名稱。
2.1.6 查看權限
- 以虛擬主機vhost視角來進行查看。
- 以用戶視角來進行查看。
2.2 用戶管理類
一個用戶可以跨越多個 vhost 進行授權。針對一至多個 vhost,用戶可以被賦予不同級別的訪問權限,并使用標準的用戶名和密碼來認證用戶。
- 啥意思呢?用戶qingjun對wuhan虛擬主機、beijing虛擬主機的訪問權限可以單獨設置。
2.2.1 創建用戶
命令格式: rabbitmqctl add_user {username] [password}。
- username:表示要創建的用戶名稱。
- password:表示創建用戶登錄的密碼。
2.2.2 查看用戶
命令格式:rabbitmqctl list_users
- 每個結果行都包含用戶名稱,其后緊跟用戶的角色 (tags)。
- 用戶的角色分為5個類型:
- none: 無任何角色。新創建的用戶的角色默認為 none。
- management: 可以訪問 Web 管理頁面。Web 管理頁面在 5.3 節中會有詳細介紹
- policymaker:包含 management 的所有權限,并且可以管理策略 (Policy) 和參數(Parameter)。詳細內容可參考 6.3 節
- monitoring: 包含 management 的所有權限,并且可以看到所有連接、信道及節點相關的信息。
- administartor: 包含 monitoring 的所有權限,并且可以管理用戶、虛擬主機、權限、策略、參數等。administator 代表了最高的權限。
2.2.3 刪除用戶
命令格式:rabbitmgctl delete_user {username}
- username:表示要刪除的用戶名稱。
2.2.4 用戶指定角色
命令格式: rabbitmqctl set_user_tags {username} {tag …}
- username:表示需要設置角色的用戶名稱。
- tag:參數用于設置 0 個、1個或者多個的角色,設置之后任何之前現有的身份都會被刪除。
- 用戶的角色分為 5 種類型:
- none: 無任何角色。新創建的用戶的角色默認為 none。
- management: 可以訪問 Web 管理頁面。
- policymaker: 包含 management 的所有權限,并且可以管理策略 (Policy) 和參數(Parameter)。
- monitoring: 包含 management 的所有權限,并且可以看到所有連接、信道及節點相關的信息。
- administartor: 包含 monitoring 的所有權限,并且可以管理用戶、虛擬主機、權限、策略、參數等。administator 代表了最高的權限。
2.2.5 更改用戶密碼
命令格式:rabbitmqctl change_password {username) newpassword}
- username:表示要變更密碼的用戶名稱。
- newpassword:表示要變更的新的密碼。
2.2.6 清除用戶密碼
命令格式:rabbitmqctl clear_password {username}
- username 表示要清除密碼的用戶名稱。
2.2.7 密碼驗證用戶
命令格式:rabbitmqctl authenticate user {username] [password}
- username:表示需要被驗證的用戶名稱。
- password:表示密碼。
2.3 插件使用類
在前面安裝步驟我們還用到一個啟用插件命令,啟用了web端的管理頁面就可以不用敲命令這么麻煩,直接可以在web頁面上來管理虛擬主機、用戶、隊列、交換器、綁定關系、策略、各種參數等等。
- RabbitMQ management 插件也是是由Erlang 語言編寫的,并且和 RabbitMQ 服務運行在同一個Erlang 虛擬機中。
- RabbitMQ management 插件可以提供 Web 管理界面用來管理如前面所述的虛擬主機、用戶等,也可以用來管理隊列、交換器、綁定關系、策略、參數等,還可以用來監控 RabbitMO服務的狀態及一些數據統計類信息,可謂是功能強大,基本上能夠涵蓋所有 RabbitMQ管理的功能。
- RabbitMO 提供了很多的插件,默認存放在SRABBITMQ HOME/plugins 目錄下。從下圖可以看出非常多,其中就可以看到我們已經提到過的tracing插件。
- 插件的命令為rabbitmq-plugins,其命令格式為:rabbitmq-plugins [-n node] {command} [command options…]。
2.3.1 啟動插件
命令格式:rabbitmg-plugins enable [plugin-name]
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management2.3.2 關閉插件
命令格式:rabbitmg-plugins disable [plugin-name]。
[root@localhost ~]# rabbitmq-plugins disable rabbitmq_management2.3.3 查看插件使用情況
命令格式:rabbitmq-plugins list
- 標記為[E*]的為顯式啟動,標記[e*]為隱式啟動,
- 如顯式啟動 rabbitmg management 插件會同時隱式啟動 rabbitmq_management_agent、rabbitmq_web_dispatch 2個插件。
- 開啟插件后,我們就可以在頁面上進行操作,這個插件功能非常強大,后面再具體講各種細節,這里先創建個用戶玩玩。
- 創建完用戶在命令行也可以查找出來。
2.4 應用管理類
2.4.1 啟動rabbitmq服務
2.4.1.1 前臺啟動
命令格式:rabbitmq-server start
- 此種方式啟動只能前臺運行,并產生rabbitmq-server進程,crl+C則退出關閉服務。
2.4.1.2 后臺啟動
命令格式:rabbitmg-server -detached
- 這個命令會順帶啟動 Erlang 虛擬機和 RabbitMQ 應用服務。
- RabbitMQ 應用服務啟動的前提是 Erlang 虛擬機是運轉正常的。
2.4.2 關閉rabbitmq服務
- 關閉rabbitmq服務會將 Erlang 虛擬機一同關閉,而 rabbitmgctl stop_app 只關閉 RabbitMQ 應用服務。
- 停止erlang虛擬機和服務應用的命令有兩個。
- rabbitmqctl stop [pid_file]
- rabbitmactl shutdown
- 兩個命令用法不同,但效果是一樣的。
2.4.2.1 指定pid文件阻塞進程關閉(stop)
命令格式:rabbitmqctl stop [pid_file]
- 如果指定了 pid_file,會發生阻塞,需要等待指定進程的結束。其中 pid file 是通過調用 rabbitmg-server 命令啟動RabbitMO 服務時創建的,默認情況下存放于 Mnesia 目錄中,可以通過 RABBITMO PID EILE這個環境變量來改變存放路徑。
- 如果使用 rabbitmg-server -detach 命令來啟動 RabbitMQ服務,則不會生成 pid file 文件。
2.4.2.2 直接阻塞進程關閉(shutdown)
命令格式:rabbitmactl shutdown
- 也是用于停止運行 RabbitMQ 的 Erlang 虛擬機和 RabbitMQ 服務應用。
- 與rabbitmgctl stop 不同的是,它不需要指定 pid_file 就可以阻塞等待指定進程的關閉,直到 Erlang 虛擬機進程退出。
- 如果 RabbitMQ沒有成功關閉,則會返回一個非零值。
2.4.3 只停止應用服務
命令格式:rabbitmactl stop_app
- 停止 RabbitMQ 服務應用,但是 Erlang 虛擬機還是處于運行狀態。
- 該命令的執行優先于其他管理操作,也就是需要先停止服務應用才能再去執行其他的管理操作。比如:rabbitmactl reset。
2.4.3 啟動應用服務
命令格式:rabbitmqctl start_app
- 常常用于執行了其他管理操作之后,重新啟動之前停止的 RabbitMQ應用。比如 rabbitmqctl reset。
2.4.4 等待應用服務啟動
命令格式:rabbitmqctl wait [pid_file]等待 RabbitMQ 應用的啟動。
- 它會等到 pid file 的創建,然后等待 pid_file 中所代表的進程啟動。
- 當指定的進程沒有啟動 RabbitMQ應用而關閉時將會返回失敗。
2.4.5 先停止應用再重置rabbitmq服務狀態
命令格式:rabbitmqctl reset
- 將 RabbitMO 節點重置還原到最初狀態。包括從原來所在的集群中刪除此節點,從管理數據庫中刪除所有的配置數據,如已配置的用戶、vhost 等,以及刪除所有的持久化消息。
- 執行rabbitmactl reset 命今前必須停止 RabbitMQ應用,比如先執行 rabbitmqctl stop_app)。
2.4.6 強制重置rabbitmq服務狀態
命令格式:rabbitmactl force_reset
- 強制將 RabbitMQ 節點重置還原到最初狀態。不同于 rabbitmqctl reset 命令,rabbitmgct force_reset 命令不論當前管理數據庫的狀態和集群配置是什么,都會無條件地重置節點。
- 所以它只能在數據庫或集群配置已損壞的情況下使用。
- 執行 rabbitmqctl force reset 命令前必須先停止 RabbitMO 應用。
2.4.7 輪換日志文件(已棄用)
命令格式:rabbitmgctl rotate_logs {suffix}
- 作用:指示 RabbitMQ 節點輪換日志文件。RabbitMQ 節點會將原來的日志文件中的內容追加到“原始名稱+后綴”的日志文件中,然后再將新的日志內容記錄到新創建的日志中(與原日志文件同名)。當目標文件不存在時,會重新創建。 如果不指定后綴 suffix參數,則日志文件只是重新打開而不會進行輪換。
- 現已棄用。
2.4.8 生成HiPE編譯代碼.beam文件(已棄用)
命令格式:rabbitmqctl hipe_compile {directory}
- 作用:將部分 RabbitMQ代碼用 HiPE (HiPE 是指 High Performance Erlang,是 Erlang 版的JIT)編譯,并且將編譯后的.beam 文件 (beam 文件是 Erlang 編譯器生成的文件格式,可以直接加載到 Erlang 虛擬機中運行的文件格式)保存到指定的文件目錄中。如果這個目錄不存在則會自行創建。如果這個目錄中原本有任何.beam 文件,則會在執行編譯前被刪除。如果要使用預編譯的這些文件,則需要設置RABBITMO SERVER CODE PATH這個環境變量來指定 hipe compile調用的路徑。
- 現已棄用。
還有集群類命令,服務端類命令,還有rabbitmqadmin工具的使用,等集群安裝后再講解這些!
總結
以上是生活随笔為你收集整理的rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冬虫夏草之技术路线图之三【“路”——经营
- 下一篇: 福建省计算机二级登录入口,福建省教育考试