1. 程式人生 > >RabbitMQ CLI 管理工具 rabbitmqadmin(管理和監控)

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.testmy.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-工具介紹requestresponse

服務器 src 工具 -type 每一個 請求頭 協議 內容 直接 前言 本篇簡單的介紹下fiddler界面的幾塊區域,以及各自區域到底是幹什麽用的,以便於各好的掌握這個工具 一、工具簡介 1.第一塊區域是設置菜單,這個前面2篇都有介紹 2.第二塊區域是一些快捷菜單,可

Fiddler抓包-工具介紹requestresponse

from:https://www.cnblogs.com/yoyoketang/p/6731121.html 本篇簡單的介紹下fiddler介面的幾塊區域,以及各自區域到底是幹什麼用的,以便於各好的掌握這個工具 一、工具簡介 1.第一塊區域是設定選單,這個前面2篇都有介紹 2.第二塊區域是一些快捷選單

WIN10彙編開發工具準備MASMDOSBOX

侵刪 引用: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)

版本管理之GitGitHub的區別優點缺點

機制 最大 客戶 內核 文件 敏捷 star 一定的 sch Git 簡介 https://www.yiibai.com/git/getting-started-git-basics.html Git 是一個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的

linux用戶管理 -- 創建用戶adduseruseradd刪除用戶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 GroupTeam 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 GroupsTeam 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)開啟命令