RabbitMQ CLI 管理工具 rabbitmqadmin(管理和監控)
插個廣告,公司最近在招“.NET”開發(杭州),如果你現在還從事 .NET 開發(想用 .NET Core,但被公司不認可),想轉 JAVA 開發(但又沒有工作經驗,懼怕面試),想用微服務架構重構(面對現有龐大的單體應用程式,有心無力),那麼請關注右側的公眾號私信我,或許我可以幫到你一些~~~
一般情況下,我們會使用 rabbitmq_management 外掛,通過 Web UI 的方式來監控和操作 RabbitMQ(埠 15672),但有時候命令的方式會更加方便一些,RabbitMQ 提供了 CLI 管理工具 rabbitmqadmin ,其實就是基於 RabbitMQ 的 HTTP API,用 Python 寫的一個指令碼。
另外,除了 rabbitmqadmin ,有個人也寫了一個 rabbitmq-dump-queue 指令碼,用於抓取 Queue 佇列,用檔案進行儲存,但使用下來,感覺還是官方的 rabbitmqadmin 比較好些。
rabbitmqadmin 提供了下面功能:
- 列出 exchanges, queues, bindings, vhosts, users, permissions, connections and channels。
- 建立和刪除 exchanges, queues, bindings, vhosts, users and permissions。
- 釋出和獲取訊息,以及訊息詳情。
- 關閉連線和清空佇列。
- 匯入匯出配置。
使用 rabbitmqadmin 的時候,我們需要理解 RabbitMQ 的基本概念,先回顧一下:
RabbitMQ 概念:
概念 | 詳解 |
---|---|
Exchange | 訊息交換機,它指定訊息按什麼規則,路由到哪個佇列 |
Queue | 訊息佇列,每個訊息都會被投入到一個或多個佇列 |
Binding | 繫結,它的作用就是把 exchange 和 queue 按照路由規則繫結起來 |
Routing Key | 路由關鍵字,exchange 根據這個關鍵字進行訊息投遞 |
Vhost | 虛擬主機,可以開設多個 vhost,用作不同使用者的許可權分離 |
Producer | 訊息生產者,就是投遞訊息的程式 |
Consumer | 訊息消費者,就是接受訊息的程式 |
Channel | 訊息通道,在客戶端的每個連線裡,可建立多個 channel,每個 channel 代表一個會話任務 |
RabbitMQ 流程:
RabbitMQ 投遞過程:
- 1. 客戶端連線到訊息佇列伺服器,開啟一個 channel。
- 2. 客戶端宣告一個 exchange,並設定相關屬性。
- 3. 客戶端宣告一個 queue,並設定相關屬性。
- 4. 客戶端使用 routing key,在 exchange 和 queue 之間建立好繫結關係。
- 5. 客戶端投遞訊息到 exchange。
- 6. 客戶端從指定的 queue 中消費資訊。
不理解?沒關係,看下面。
接下來,我們就用 rabbitmqadmin ,來演示上面 RabbitMQ 投遞過程。
如果我們安裝了rabbitmq_management
外掛,可以開啟http://node1:15672/cli/
頁面,下載 rabbitmqadmin。
或者直接進行下載:
[[email protected] ~]# wget http://node1:15672/cli/rabbitmqadmin
然後移到PATH
目錄,並賦予許可權:
[[email protected] ~]# mv rabbitmqadmin /usr/local/bin
[[email protected] ~]# sudo chmod 777 /usr/local/bin/rabbitmqadmin
檢視 rabbitmqadmin 命令:
[[email protected] ~]# rabbitmqadmin -help
Usage
=====
rabbitmqadmin [options] subcommand
...
建立一個test
佇列:
[[email protected] ~]# rabbitmqadmin declare queue name=test durable=true
queue declared
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
需要注意:durable=true
表示持久化,如果沒有建立 Exchange,RabbitMQ 會使用預設的 Exchange,以及建立一個 Binding,這也就是為什麼下面釋出訊息,可以成功的原因。
釋出一條訊息:
[[email protected] ~]# rabbitmqadmin publish routing_key=test payload="hello world"
Message published
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1 |
+------+----------+
消費一條訊息(檢視訊息內容):
[[email protected] ~]# rabbitmqadmin get queue=test requeue=true
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| test | | 0 | hello world | 11 | string | | False |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1 |
+------+----------+
[[email protected] ~]# rabbitmqadmin get queue=test requeue=false
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| test | | 0 | hello world | 11 | string | | True |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
需要注意:requeue=true
表示檢視佇列,不消費;requeue=false
表示檢視佇列,進行消費。
我們檢視下上面建立佇列後,預設建立的 Binding:
[[email protected] ~]# rabbitmqadmin list bindings
+--------+-------------+-------------+
| source | destination | routing_key |
+--------+-------------+-------------+
| | test | test |
+--------+-------------+-------------+
可以看到,使用的預設 Exchange 是空字串(系統中的第一個 Exchange,Binding 中的 source 部分),並且這個預設的 Exchange 是direct
型別(也就是一對一模式),這種隱式呼叫確保了訊息準確投遞。
另外,再說一下 Binding 中的三個概念:
- Source:源頭的意思,其實就是 Exchange。
- destination:目的地的意思,其實就是 Queue。
- routing_key:路由鍵的規則,用於 Queue 匹配(比如
test.#
)。
那下面我們就手動建立一下 Exchange:
[[email protected] ~]# rabbitmqadmin declare exchange name=my.topic type=topic
exchange declared
[[email protected] ~]# rabbitmqadmin list exchanges
+--------------------+---------+
| name | type |
+--------------------+---------+
| | direct |
| amq.direct | direct |
| amq.fanout | fanout |
| amq.headers | headers |
| amq.match | headers |
| amq.rabbitmq.log | topic |
| amq.rabbitmq.trace | topic |
| amq.topic | topic |
| my.topic | topic |
+--------------------+---------+
需要注意:這邊我們只建立了一個 Exchange,型別為 Topic,和之前建立的test
佇列,目前沒有任何關係。
然後再建立一個 Binding:
[[email protected] ~]# rabbitmqadmin declare binding source=my.topic destination=test routing_key=my.#
binding declared
[[email protected] ~]# rabbitmqadmin list bindings
+----------+-------------+-------------+
| source | destination | routing_key |
+----------+-------------+-------------+
| | test | test |
| my.topic | test | my.# |
+----------+-------------+-------------+
需要注意:我們上面建立的 Binding(最後那個),就是將名稱為my.topic
的 Exchange 和名稱為test
的 Queue 關聯起來,並且設定的routing_key
規則為my.#
。
下面我們釋出兩條訊息:
[[email protected] ~]# rabbitmqadmin publish routing_key=my.test exchange=my.topic payload="hello world by my.test"
Message published
[[email protected] ~]# rabbitmqadmin publish routing_key=my.test.test exchange=my.topic payload="hello world by my.test.test"
Message published
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 2 |
+------+----------+
需要注意,釋出的兩條訊息都指定了my.topic
的 Exchange,但訊息的routing_key
不同,但都成功釋出到test
隊列了,原因是my.test
和my.test.test
都符合my.#
路由規則。
下面,我們對兩條訊息進行消費:
[[email protected] ~]# rabbitmqadmin get queue=test requeue=false
+-------------+----------+---------------+------------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+------------------------+---------------+------------------+------------+-------------+
| my.test | my.topic | 1 | hello world by my.test | 22 | string | | False |
+-------------+----------+---------------+------------------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin get queue=test requeue=false
+--------------+----------+---------------+-----------------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
+--------------+----------+---------------+-----------------------------+---------------+------------------+------------+-------------+
| my.test.test | my.topic | 0 | hello world by my.test.test | 27 | string | | False |
+--------------+----------+---------------+-----------------------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0 |
+------+----------+
rabbitmqadmin 測試到這邊,你應該就體會到了 RabbitMQ 的投遞過程了吧,我們再對之前的投遞過程完善下:
- 1. 宣告一個 Queue,和誰都沒有關係(只有名稱和持久化配置)。
- 2. 宣告一個 Exchange,和誰都沒有關係(只有名稱和 Exchange Type 配置)。
- 3. 宣告一個 Binding,通過 source 和 destination,將 Queue 和 Exchange 關聯起來,並通過 routing_key,設定釋出訊息的路由規則。
- 4. 釋出一個訊息,需要指定一個 Exchange,以及本身的路由名稱。
- 5. 消費佇列中的訊息,需要指定一個 Queue。
rabbitmqadmin 命令彙總:
命令 | 解釋 |
---|---|
rabbitmqadmin list users | 檢視所有使用者 User |
rabbitmqadmin list users name | 檢視所有使用者名稱 Username |
rabbitmqadmin list users tags | 檢視所有使用者角色 |
rabbitmqadmin list vhosts | 檢視所有虛擬主機 |
rabbitmqadmin list connections | 檢視所有連線 |
rabbitmqadmin list exchanges | 檢視所有路由 Exchange |
rabbitmqadmin list bindings | 檢視所有路由與佇列的關係繫結 Binding |
rabbitmqadmin list permissions | 檢視所有角色的許可權 Permission |
rabbitmqadmin list channels | 檢視所有通道 Channel |
rabbitmqadmin list consumers | 檢視所有消費者 Consumer |
rabbitmqadmin list queues | 檢視所有訊息佇列 Queue |
rabbitmqadmin list nodes | 檢視所有節點 Node |
rabbitmqadmin show overview | 概覽 Overview |
rabbitmqadmin list bindings source destination_type destination properties_key | 檢視所有路由與佇列的關係繫結的詳細資訊 Binding |
rabbitmqadmin declare queue name=test durable=true | 定義一個佇列queue,durable=true代表持久化開啟。 |
rabbitmqadmin declare exchange name=my.fanout type=fanout | 定義一個Fanout路由 |
rabbitmqadmin declare exchange name=my.direct type=direct | 定義一個Direct路由 |
rabbitmqadmin declare exchange name=my.topic type=topic | 定義一個Topic路由 |
rabbitmqadmin declare binding source=my.fanout destination=test routing_key=first | 定義 binding |
rabbitmqadmin publish routing_key=test payload="hello world" | 釋出一條訊息 |
rabbitmqadmin publish routing_key=my.test exchange=my.topic payload="hello world" | 使用路由轉發訊息 |
rabbitmqadmin get queue=test requeue=true | 檢視訊息,不消費 |
rabbitmqadmin get queue=test requeue=false | 檢視訊息,並消費 |
rabbitmqadmin purge queue name=test | 刪除佇列中的所有訊息 |
rabbitmqadmin delete queue name=hello | 刪除訊息佇列 Queue |
rabbitmqadmin delete user name=test | 刪除使用者 User |
rabbitmqadmin delete exchange name=test | 刪除路由器 Exchange |
rabbitmqadmin delete binding source='kk' destination_type=queue destination=test properties_key=test | 刪除路由器與訊息佇列的關係繫結 Binding |
rabbitmqadmin -f raw_json list users | raw_json 格式化輸出 |
rabbitmqadmin -f long list users | 格式化輸出 |
rabbitmqadmin -f pretty_json list users | pretty_json 格式化輸出 |
rabbitmqadmin -f kvp list users | 格式化輸出 |
rabbitmqadmin -f tsv list users | 格式化輸出 |
rabbitmqadmin -f table list users | table 格式化輸出 |
rabbitmqadmin -f bash list users | bash 格式化輸出 |
參考資料:
相關推薦
RabbitMQ CLI 管理工具 rabbitmqadmin(管理和監控)
插個廣告,公司最近在招“.NET”開發(杭州),如果你現在還從事 .NET 開發(想用 .NET Core,但被公司不認可),想轉 JAVA 開發(但又沒有工作經驗,懼怕面試),想用微服務架構重構(面對現有龐大的單體應用程式,有心無力),那麼請關注右側的公眾號私信我,或許我可以幫到你一些~~~ 一般情況下
Fiddler抓包4-工具介紹(request和response)
服務器 src 工具 -type 每一個 請求頭 協議 內容 直接 前言 本篇簡單的介紹下fiddler界面的幾塊區域,以及各自區域到底是幹什麽用的,以便於各好的掌握這個工具 一、工具簡介 1.第一塊區域是設置菜單,這個前面2篇都有介紹 2.第二塊區域是一些快捷菜單,可
Fiddler抓包-工具介紹(request和response)
from:https://www.cnblogs.com/yoyoketang/p/6731121.html 本篇簡單的介紹下fiddler介面的幾塊區域,以及各自區域到底是幹什麼用的,以便於各好的掌握這個工具 一、工具簡介 1.第一塊區域是設定選單,這個前面2篇都有介紹 2.第二塊區域是一些快捷選單
WIN10彙編開發工具準備(MASM和DOSBOX)
侵刪 引用:http://blog.csdn.net/doniexun/article/details/45438457 debuge工具下載:http://www.pcsoft.com.cn/soft/35986.html masm工具下載http://blog.fishc.com/602.
RabbitMQ 配置檔案詳解(生產者和消費者)
一、rabbitmq 配置檔案 在web 專案開發過程中,一般分為生產者配置檔案和消費者配置檔案。廢話少說,馬上教您整個流程的配置! 1、準備工作:安裝好rabbitmq,並在專案中增加配置檔案 rabbit.properties 內容如下: rmq.ip=192.1
Memcached的Web管理工具MemAdmin(待實踐)
好用 lan 下載 tail emc details -1 nbsp bsp Memcached的Web管理工具有很多,但是最好用的應該是MemAdmin。基於PHP5開發,所以部署時要註意環境。 介紹:http://www.junopen.com/memadmin/
測試管理工具實踐(小組作業)——11.16
內容 火車 文檔 展示 安裝 link 完成 實踐 使用 今日工作進度情況: 李璋毅:下載並安裝Testlink,配置環境,完成工具供應商、發展簡史等方面的文檔撰寫,發布博客,匯總小組所有資料; 儲誌峰:完成工具的安裝,完成編輯該工具的下載地址以及對應的工具,對應的方法
測試管理工具實踐(Bugfree)使用思考
獨立 簡單實用 登錄 ima bug bugfree 質量 es2017 sql (1)工具概述,簡要說明小組選擇的是什麽測試管理工具。 BugFree是借鑒微軟的研發流程和Bug管理理念,使用PHP+MySQL獨立寫出的一個Bug管理系統。簡單實用、免費並且開放源代碼
linux系統管理工具sar(一)
sed 監控內存 用戶態 打開 沒有 3.6 block 1.5 3.4 linux系統管理工具sar 監控網卡流量 #sar -n DEV 1 1 (1秒內取1次) Linux 3.10.0-123.9.3.el7.x86_64 (iZ25wvw5wozZ)
版本管理(一)之Git和GitHub的區別(優點和缺點)
機制 最大 客戶 內核 文件 敏捷 star 一定的 sch Git 簡介 https://www.yiibai.com/git/getting-started-git-basics.html Git 是一個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的
linux用戶管理 -- 創建用戶(adduser和useradd)和刪除用戶(userdel)
user 不同 lin shel 無法 沒有 創建用戶 修改密碼 centos 一 用戶創建命令: # adduser 用戶名 # useradd 用戶名 1) useradd 與 adduser 的區別 在CentOs系統中: useradd與adduser是沒有
KVM web管理工具——WebVirtMgr(一)
WebVirtMgr 介紹 WebVirtMgr採用幾乎純Python開發,其前端是基於Python的Django,後端是基於Libvirt的Python介面,將日常kvm的管理操作變的更加的視覺化。 WebVirtMgr 特點 操作簡單,易於
如何刪除和管理Microsoft Team (Office 365 Group)Team Site
2016年年底,微軟正式釋出基於Office 365平臺的一款高效提高團隊溝通和交流的工具:Microsoft Teams,一個非常強大的團隊工作中心,能給將聊天、會議、文件共享和一些協助日常辦公的應用:Word,Excel,PowerPoint,OneNote,SharePoint,Power BI等整合到
scrum經典管理工具:白板和即時貼
scrum最傳統,也是最直觀的管理工具就是白板和即時貼。一個團隊通過一個白板和即時貼來完成對scrum中story和task的跟蹤管理。見下圖: 圖一:任務看板: 分為三列,todo表示為開始,doing為正在進行中,done表示已完成。團隊的成員每天將自己負責的任務
測試管理工具——JIRA(轉)
為什麼選擇JIRA? 因為你有各種事務工作中總是有各種事務要去處理,而這些事務不僅僅是程式碼中的Bug。這些事務充斥在你的收件箱中,各種想法散落在 Excel表格裡,需求隱藏在原有的業務系統中。使用JIRA可以輕鬆捕捉和管理你的事務,排定優先順序,把工作放在重
Office 365:如何刪除和管理Microsoft Team (Office 365 Groups)Team Site
部落格地址:http://blog.csdn.net/shelleyliu0415 2016年年底,微軟正式釋出基於Office 365平臺的一款高效提高團隊溝通和交流的工具:Microsoft Teams,一個非常強大的團隊工作中心,能給將聊天、會議、文件共享和一些協助日常辦公的應用:Wo
node管理工具 nvm 下載安裝和使用
首先 需要解除安裝掉我們的node及之前配置好的環境變數 還有c盤使用者下的.npmrc的檔案 下載nvm 點我 下載最新版本中 noinstall.zip的檔案 然後解壓到你要存放的目錄裡 我放在了 D
Android Studio之版本管理工具Git (圖文教程)
目前業界主流的版本管理工具主要是 svn/git。svn是1種集中式的程式碼管理工具,而git是1種散佈式的程式碼管理工具,廣受極客的愛好。而基於git的github更是全宇宙碼農的提高逼格,深究技術的必備神器。下面介紹,如何將Android Studio中的工程託管到g
專案管理工具——maven(筆記一)
一、什麼是maven maven是基於專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。 maven是跨平臺的專案管理工具。主要服務於基於java平臺的專案構建,依賴管理和專案資訊管理。
ubuntu上使用PHP依賴管理工具Composer(二)——自動載入
結合phpstorm使用Composer命令列 初始化Composer 在phpstorm中建立新的專案test tools->run command(Ctrl+Shift+X)開啟命令