文章目錄
- 使用CLI管理RabbitMQ
- rabbitmqctl
- rabbitmq-queues
- rabbitmq-diagnostics
- rabbitmq-plugins
- rabbitmq-streams
- rabbitmq-upgrade
- rabbitmqadmin
使用CLI管理RabbitMQ
RabbitMQ CLI 工具需要安裝兼容的 Erlang/OTP版本。
這些工具假定系統區域設置為 UTF-8(例如en_GB.UTF-8或en_US.UTF-8)。如果不是這種情況,這些工具可能仍能正常運行,但不能保證。非 UTF-8 區域將發出警告。
除了 之外rabbitmqadmin,上述所有工具都隨 RabbitMQ 一起提供,可sbin 在安裝根目錄中找到。對于大多數軟件包類型,該目錄PATH在安裝時都會添加到其中,如果是使用二進制包安裝,需要手動配置sbin目錄的這些命令到系統PATH。
所有命令都可以使用help列出子命令或者參數
rabbitmqctl
通常僅供 RabbitMQ 管理員使用,因為它提供對節點的完全控制,包括虛擬主機、用戶和權限管理、對節點數據的破壞性操作等。
rabbitmqctl是一個用于管理RabbitMQ的命令行工具,它可以用于創建和刪除隊列、交換機以及其他RabbitMQ對象,還可以查看和修改RabbitMQ節點的狀態。以下是一些常用的
以下進列出常用rabbitmqctl命令及其功能描述,更多信息請參考help幫助或者官方文檔:https://www.rabbitmq.com/docs/3.13/man/rabbitmqctl.8
節點管理
關閉RabbitMQ服務及運行時 (Erlang VM)
rabbitmqctl shutdown
啟動和停止RabbitMQ應用
啟動RabbitMQ應用,該命令會啟動RabbitMQ消息代理服務器并使其可用。
rabbitmqctl start_app
停止RabbitMQ應用,該命令會停止RabbitMQ消息代理服務器,但不關閉Erlang虛擬機。
rabbitmqctl stop_app
用于重置 RabbitMQ 節點。這個命令會清除節點上的所有數據,包括隊列、交換機、綁定、用戶、權限和虛擬主機等
rabbitmqctl reset
查看RabbitMQ狀態
該命令會顯示RabbitMQ服務器的當前狀態,包括節點信息、隊列信息、交換機信息等。
rabbitmqctl status
用戶管理
添加新用戶:該命令會創建一個新的RabbitMQ用戶,并指定其密碼。
rabbitmqctl add_user <username> <password>
[root@rbt01 ~]# rabbitmqctl add_user admin-user01 user01pwd
Adding user "admin-user01" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
設置用戶角色:該命令會為指定用戶設置角色標簽,常見的標簽包括administrator(管理員)、monitoring(監控)和management(管理)等。
rabbitmqctl set_user_tags <username> <tag>。
[root@rbt01 ~]# rabbitmqctl set_user_tags admin-user01 administrator
Setting tags for user "admin-user01" to [administrator] ...
列出所有用戶:該命令會列出所有RabbitMQ用戶及其角色信息。
[root@rbt01 ~]# rabbitmqctl list_users
[root@rbt01 ~]# rabbitmqctl list_users
Listing users ...
user tags
admin [administrator]
admin-user01 [administrator]
guest [administrator]
刪除用戶:該命令會刪除指定名稱的RabbitMQ用戶。
rabbitmqctl delete_user <username>
[root@rbt01 ~]# rabbitmqctl delete_user admin-user01
Deleting user "admin-user01" ...
權限管理
設置用戶對虛擬主機的權限:該命令會為指定用戶在指定虛擬主機上設置配置(conf)、寫(write)和讀(read)權限。其中:
<vhost>是虛擬主機名,
<username>是用戶名,
<conf>、<write>和<read>分別是對應的權限值(可以使用”.*”表示所有權限,””表示沒有權限)。
rabbitmqctl set_permissions -p <vhost> <username> <conf> <write> <read>
全權限
[root@rbt01 ~]# rabbitmqctl set_permissions -p / admin-user01 ".*" ".*" ".*"
Setting permissions for user "admin-user01" in vhost "/" ...
只讀權限
配置和寫入權限被設置為空字符串(表示不允許),而讀取權限被設置為 “.*”(表示允許讀取所有隊列、交換機和路由鍵)。
rabbitmqctl set_permissions -p <vhost> <username> "" "" ".*"
[root@rbt01 ~]# rabbitmqctl add_vhost /vhost-test01
Adding vhost "/vhost-test01" ...[root@rbt01 ~]# rabbitmqctl set_permissions -p /vhost-test01 admin-user01 "" "" ".*"
Setting permissions for user "admin-user01" in vhost "/vhost-test01" ...
寫入權限(無配置和讀取):
rabbitmqctl set_permissions -p “” “.*” “”
[root@rbt01 ~]# rabbitmqctl set_permissions -p /vhost-test01 admin-user01 "" ".*" ""
Setting permissions for user "admin-user01" in vhost "/vhost-test01" ...
特定隊列的讀寫權限:
正則表達式 “^specific.queue$” 用于匹配名為 specific.queue 的特定隊列。用戶將只有對該隊列的配置、寫入和讀取權限。
rabbitmqctl set_permissions -p <vhost> <username> "^specific\.queue$" "^specific\.queue$" "^specific\.queue$"
多個隊列的讀寫權限
rabbitmqctl set_permissions -p <vhost> <username> "^(queue1|queue2)\." "^(queue1|queue2)\." "^(queue1|queue2)\."
無權限
rabbitmqctl set_permissions -p <vhost> <username> "" "" ""
[root@rbt01 ~]# rabbitmqctl set_permissions -p /vhost-test01 admin-user01 "" "" ""
Setting permissions for user "admin-user01" in vhost "/vhost-test01" ...
虛擬主機管理
添加虛擬主機:該命令會創建一個新的RabbitMQ虛擬主機。
rabbitmqctl add_vhost <vhost>
[root@rbt01 ~]# rabbitmqctl add_vhost /vhost-test02
Adding vhost "/vhost-test02" ...
列出所有虛擬主機:該命令會列出所有RabbitMQ虛擬主機。
rabbitmqctl list_vhosts
[root@rbt01 ~]# rabbitmqctl list_users
Listing users ...
user tags
admin [administrator]
admin-user01 [administrator]
guest [administrator]
刪除虛擬主機:該命令會刪除指定名稱的RabbitMQ虛擬主機。
rabbitmqctl delete_vhost <vhost>
[root@rbt01 ~]# rabbitmqctl delete_vhost /vhost-test02
Deleting vhost "/vhost-test02" ...
隊列管理
列出所有隊列:該命令會列出所有RabbitMQ隊列及其詳細信息。
rabbitmqctl list_queues
清空隊列:這兩個命令都可以清空指定隊列中的所有消息。
rabbitmqctl clear_queue <queue_name>或rabbitmqctl purge_queue <queue_name>
列出所有交換機:該命令會列出所有RabbitMQ交換機。
rabbitmqctl list_exchanges
列出所有綁定:該命令會列出所有RabbitMQ綁定。
rabbitmqctl list_bindings
設置交換機和隊列綁定
rabbitmqctl bind_queue -p vhost_name queue_name exchange_name routing_key
設置鏡像復制策略
rabbitmqctl set_policy ha-three-replicas "^queue_name$" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' --apply-to queues
查看隊列和策略的關聯
rabbitmqctl list_queues name policy
清除隊列里的消息
rabbitmqctl -p vhostpath purge_queue blue
集群管理
將節點加入集群:該命令會將當前節點加入到指定集群中。
rabbitmqctl join_cluster --ram <clusternode>
或rabbitmqctl join_cluster <clusternode>(默認為disc節點)
root@rbt02 ~]# rabbitmqctl join_cluster rabbit@rbt01
Clustering node rabbit@rbt02 with rabbit@rbt01
查看集群狀態:該命令會顯示RabbitMQ集群的狀態,包括集群中的節點及其狀態。
rabbitmqctl cluster_status
改變集群節點類型:該命令會改變集群節點的類型,可以是disc節點或ram節點。
磁盤節點(disc node)和內存節點(RAM node)。磁盤節點會將所有的元數據存儲在磁盤上,而內存節點則會將元數據存儲在內存中。內存節點通常具有更快的訪問速度,因為它們不需要從磁盤讀取數據,但是它們也更容易在節點重啟或崩潰時丟失數據。
rabbitmqctl [--node <node>] [--longnames] [--quiet] change_cluster_node_type <disc | ram>
# 需要先停止app
[root@rbt01 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rbt01 ...[root@rbt01 ~]# rabbitmqctl --node rabbit@rbt01 change_cluster_node_type ram
Turning rabbit@rbt01 into a ram node[root@rbt01 ~]# rabbitmqctl start_app
Starting node rabbit@rbt01 ...# 查看集群狀態,rabbit@rbt01變為了RAM Nodes
[root@rbt01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rbt01 ...
BasicsCluster name: rabbitmq-cluster-01
Total CPU cores available cluster-wide: 12Disk Nodesrabbit@rbt02
rabbit@rbt03RAM Nodesrabbit@rbt01
遠程移除集群節點:該命令會遠程移除一個集群節點,如果節點未脫機,則需要使用–offline參數。
rabbitmqctl forget_cluster_node [--offline] <clusternode>
以下是命令的詳細說明:
[root@rbt01 ~]# rabbitmqctl -n rabbit@rbt01 forget_cluster_node rabbit@rbt03
Removing node rabbit@rbt03 from the cluster
- forget_cluster_node:用于從集群的節點列表中移除一個節點。
允許從脫機節點中刪除節點。這僅在所有節點都脫機并且最后一個要關閉的節點無法聯機的情況下有用,從而阻止整個集群啟動。它不應該在任何其他情況下使用,因為它可能會導致不一致。 - [–offline]:可選參數。官方文檔說,如果指定了這個參數,那么即使指定的節點當前無法訪問(例如,因為它已經宕機或無法聯網),集群也會從它的節點列表中移除該節點。如果不指定這個參數,并且指定的節點當前無法訪問,那么命令可能會失敗。
但實際測試和官網有些出入,實際測試時,3個節點,手動ifdown rbt03節點的網卡,從另外2個節點均ping不同rbt03,帶此參數進行操作,提示如下:
[root@rbt01 ~]# rabbitmqctl -n rabbit@rbt01 forget_cluster_node --offline rabbit@rbt03
Error: this command requires the target node to be stopped.
不帶—offine 參數執行成功
[root@rbt01 ~]# rabbitmqctl -n rabbit@rbt01 forget_cluster_node rabbit@rbt03
Removing node rabbit@rbt03 from the cluster
<clusternode>
:這是你要從集群中移除的節點的名稱。通常,這個名稱的格式是rabbit@<hostname>
,其中<hostname>
是節點的主機名。
使用forget_cluster_node命令時需要注意以下幾點:
- 數據丟失風險:如果你移除的節點是磁盤節點,并且上面存儲了集群的元數據(例如,它是集群中的一個原始節點或它持有隊列的元數據),那么這些數據將會丟失。因此,在移除節點之前,請確保你已經做好了必要的數據備份。
- 集群一致性:在移除節點之前,請確保集群中的其他節點都是健康的,并且集群處于一致狀態。否則,移除節點可能會導致集群進入不一致狀態。
- 停止節點:在移除節點之前,通常建議先停止該節點上的RabbitMQ服務。這可以通過rabbitmqctl stop命令來實現。然而,如果你使用了–offline參數,那么即使節點沒有停止,你也可以從集群中移除它。但請注意,這樣做可能會增加數據丟失的風險。
- 重新平衡:移除節點后,你可能需要手動重新平衡集群中的隊列和連接,以確保集群的性能和可靠性。
rabbitmq-queues
cluster集群管理
默認創建的仲裁隊列副本數為3(需要在web管理界面創建),即使是集群節點數大于3,比如,測試集群節點為5,
仲裁隊列增加集群節點
通過在指定節點上為所有匹配的隊列添加成員(副本)來增長仲裁隊列集群。
rabbitmq-queues [--node <node>] [--longnames] [--quiet] grow <node> <all | even> [--vhost-pattern <pattern>] [--queue-pattern <pattern>] [--membership <promotable|voter>]
<--node>
用于放置副本的節點名稱
<all | even>
為所有匹配的隊列或僅為成員計數為偶數的隊列添加成員
--queue-pattern
用于匹配隊列名稱的正則表達式
--vhost
匹配虛擬主機名的正則表達式
--membership
添加可晉升的非投票人(默認)或正式投票人
--errors-only
僅列出報告錯誤的隊列為所有匹配的隊列,vhost為/,匹配所有queue 增加‘rbt04’副本節點
rabbitmq-queues grow "rabbit@rbt04" "all" --vhost-pattern "/" --queue-pattern ".*"
僅為副本數為偶數的隊列,vhost為/,匹配所有queue, 增加‘rbt05’副本節點
[root@rbt01 ~]# rabbitmq-queues grow "rabbit@rbt05" "even" --vhost-pattern "/" --queue-pattern
".*"
因使用了even參數,只匹配了偶數節點的queue-quorum-02
重新平衡仲裁隊列leader所在節點
在正在運行的集群節點之間重新平衡復制隊列的領導者
用法:
rabbitmq-queues [--node <node>] [--longnames] [--quiet] rebalance < all | classic | quorum | stream > [--vhost-pattern <pattern>] [--queue-pattern <pattern>]<type>隊列類型,必須是以下之一:all、classic、quorum、stream
--queue-pattern <pattern>用于匹配隊列名稱的正則表達式--vhost-pattern <pattern>匹配虛擬主機名的正則表達式
對vhost /下,所有的queue,進行重新平衡leader
[root@rbt01 ~]# rabbitmq-queues rebalance "all" --vhost-pattern "/" --queue-pattern ".*"
重新平衡后,3個隊列的leader 由原來的全部為rbt01,變成了rbt01,rbt03,rbt04
仲裁隊列減少集群節點
用法:
rabbitmq-queues [--node <node>] [--longnames] [--quiet] shrink <node> [--errors-only]
<node>從中刪除副本的節點名稱
--errors-only僅列出報告錯誤的隊列
[root@rbt01 ~]# rabbitmq-queues shrink rabbit@rbt04
Shrinking quorum queues on rabbit@rbt04...
vhost name size result
/ queue-quorum-03 2 ok
/ queue-quorum-01 4 ok
/ queue-quorum-02 4 ok[root@rbt01 ~]# rabbitmq-queues shrink rabbit@rbt05
Shrinking quorum queues on rabbit@rbt05...
vhost name size result
/ queue-quorum-01 3 ok
/ queue-quorum-02 3 ok
Replication副本管理
用于隊列(尤其是仲裁隊列)的維護任務, 管理復制隊列的副本
add_member 在給定節點上添加仲裁隊列成員(副本)
rabbitmq-queues add_member --vhost / queue-quorum-01 rabbit@rbt04
rabbitmq-queues add_member --vhost / queue-quorum-01 rabbit@rbt05
delete_member刪除給定節點上的仲裁隊列成員(副本)。
rabbitmq-queues delete_member --vhost / queue-quorum-01 rabbit@rbt01
rabbitmq-queues delete_member --vhost / queue-quorum-01 rabbit@rbt02
隊列監控及健康檢查
- check_if_cluster_has_classic_queue_mirroring_policy
如果集群中有啟用經典隊列鏡像的策略,則會以非零代碼退出健康檢查。自2021年以來,經典隊列鏡像已被棄用,并在RabbitMQ 4.0開發周期中被完全刪除。
rabbitmqadmin declare queue name=queue-classic-02 durable=truerabbitmqctl set_policy --priority 0 --apply-to queues queue_classic_policy01 "^queue-classic-02" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}'rabbitmq-queues check_if_cluster_has_classic_queue_mirroring_policy[root@rbt01 ~]# echo $?
69
- check_if_new_quorum_queue_replicas_have_finished_initial_sync
- 如果當前節點上有運行可升級副本的隊列,則以非零代碼退出健康檢查。
- 當你使用 quorum 隊列時,這是一種提供高可用性(HA)和數據一致性的隊列類型。它依賴于多個隊列副本(replicas)來確保消息不會丟失,并且隊列可以在集群的節點之間可靠地遷移。在創建或重新配置 quorum 隊列后,這些隊列副本需要進行初始同步,以確保所有副本都擁有相同的消息狀態。
- 這個操作或檢查,通常是在自動化腳本或監控系統中進行的,目的是確認新添加的或重新配置的 quorum 隊列副本是否完成了初始同步過程。這是非常重要的,因為只有在所有副本都同步完成后,隊列才能被認為是健康且可以正常使用的。
-
check_if_node_is_mirror_sync_critical
如果存在沒有在線同步鏡像的經典鏡像隊列(如果目標節點關閉,這些隊列可能會丟失數據),則以非零代碼退出健康檢查
-
check_if_node_is_quorum_critical
如果存在具有最低在線仲裁的隊列/流(如果目標節點關閉,這些隊列/流將失去其仲裁),則以非零代碼退出的健康檢查
-
list_operator_policies_with_classic_queue_mirroring
列出啟用經典隊列鏡像的所有操作員策略
-
list_policies_with_classic_queue_mirroring
列出啟用經典隊列鏡像的所有策略
-
peek
rabbitmq-queues peek --vhost “a-vhost” “a-queue” “1”
顯示隊列中給定位置的消息的詳細信息。當前只有仲裁隊列支持此命令。
-
quorum_status
查看指定的仲裁隊列狀態
RabbitMQ Quorum隊列(Raft隊列)的狀態信息中, quorum_status列出的是與Raft算法相關的關鍵指標。- Last Log Index:
表示節點Raft日志中最后一條日志條目的索引值。
這個值反映了節點接收到的最新日志條目的位置。 - Last Written:
表示節點最后寫入到Raft日志中的日志條目的索引值。
在正常情況下,Last Written 應該與 Last Log Index 相同,表示所有接收到的日志條目都已經被寫入。 - Last Applied:
表示節點最后應用到其狀態機(在這個情況下是RabbitMQ隊列的狀態)的日志條目的索引值。
在Raft算法中,日志條目在被提交(Commit Index)之后,才會被應用到狀態機上。
因此,Last Applied 應該小于或等于 Commit Index。 - Commit Index:
表示已經被集群中大多數節點(包括領導者)確認并可以安全應用到狀態機的日志條目的索引值。
一旦日志條目達到了 Commit Index,它就可以被應用到狀態機上,并且這個操作是安全的,即使在未來發生領導者變更或節點故障。 - Snapshot Index:
表示節點最近一次創建快照時,快照中包含的日志條目的最大索引值。
快照是一種優化技術,用于減少Raft日志的大小,并加速新節點的加入和故障恢復過程。
如果還沒有創建快照,這個值可能是 undefined 或其他表示未設置的標志。 - Term:
表示當前領導者或選舉周期的編號。
在Raft算法中,每當發生領導者選舉時,Term 的值就會增加。
Term 用于確保選舉的安全性,防止舊的領導者在失去聯系后重新成為領導者。 - Machine Version:
表示RabbitMQ節點上運行的Raft算法實現的版本號。
這個值有助于了解節點是否運行了相同版本的Raft算法實現,這對于集群的一致性和兼容性很重要。
- Last Log Index:
-
stream_status
顯示stream 隊列的狀態
rabbitmq-queues stream_status queue-stream-01
rabbitmq-diagnostics
用于診斷監測和健康檢查
alarms
列出集群中的資源警報(如果有)
check_certificate_expiration
檢查證書是否即將到期
rabbitmq-diagnostics [–node ] [–longnames] [–quiet] check_certificate_expiration [–within ] [–unit ]
–unit 指定時間單位,years,months,weeks,days
–within 時間單位的數值,比如默認是4 weeks
check_local_alarms
如果目標節點上有警報,則健康檢查失敗(返回非零代碼)。
check_port_connectivity
如果目標節點上的任何偵聽器端口無法接受由以下方式打開的新 TCP 連接,則健康檢查失敗(返回非零代碼),該檢查僅驗證新的 TCP 連接是否被接受。它不執行消息傳遞協議握手或身份驗證。
check_port_listener
檢查指定端口是否在監聽,健康檢查失敗(返回非零代碼)
check_running
檢查RabbitMQ節點是否正在運行。
如果 RabbitMQ 應用程序未在目標節點上運行,則健康檢查失敗(返回非零代碼)。
erlang_cookie_hash
輸出目標節點用于驗證 CLI 工具和對等節點的共享密鑰的哈希值。該值可與 CLI 工具錯誤消息中找到的哈希值進行比較。
check_if_any_deprecated_features_are_used
檢查是否有不推薦的特性在使用
consume_event_stream
于實時消費(即接收和處理)RabbitMQ 節點的事件流。這個命令可以幫助管理員監控和調試 RabbitMQ 集群的狀態和性能,因為它能夠實時展示各種內部事件,比如隊列的創建和刪除、連接的建立與斷開、消息的發布和消費等。
runtime_thread_stats
對間隔x秒(默認5秒)的運行時(內核)線程活動進行采樣并報告
cluster_status
顯示RabbitMQ集群的狀態信息,包括節點、隊列等。
memory_breakdown
顯示RabbitMQ節點的內存使用情況。
code: Erlang虛擬機中加載的代碼(字節碼和模塊元數據)所占用的內存。
other_system: Erlang 虛擬機內部使用的內存,不包括代碼、進程堆或ETS表等。這個類別通常包括Erlang運行時的內部結構和數據。
other_proc: 與Erlang進程相關的內存,但不包括明確列出的其他進程類別(如連接、隊列進程等)。
allocated_unused: 已分配但當前未使用的內存。這可能是因為內存被預先分配以優化性能,但當前未被實際使用。
other_ets: Erlang的ETS(Erlang Term Store)表使用的內存,ETS是Erlang中用于存儲鍵值對的一種數據結構。
reserved_unallocated: 保留但尚未分配的內存。這通常是為了將來的內存需求而預留的。
atom: Erlang中的原子表使用的內存,原子是Erlang中用于存儲字符串和整數的全局符號表。
plugins: RabbitMQ插件使用的內存。
metrics: 與RabbitMQ性能指標相關的內存使用。
binary: 二進制數據(如消息體)使用的內存。
mgmt_db: 管理數據庫使用的內存,RabbitMQ的管理插件使用此數據庫來存儲配置和管理信息。
msg_index: 消息索引使用的內存,這有助于快速查找和檢索消息。
metadata_store 和 metadata_store_ets: 與RabbitMQ內部元數據存儲相關的內存使用。
mnesia: Mnesia數據庫使用的內存,Mnesia是Erlang的一個分布式數據庫管理系統,RabbitMQ使用它來持久化隊列、交換機和綁定等元數據。
check_local_alarms
檢查RabbitMQ節點是否有本地警報。
maybe_stuck
用于檢查 RabbitMQ 節點上是否存在可能卡死的隊列、通道或連接。這個命令通過分析
RabbitMQ 的內部狀態,嘗試識別出那些長時間沒有活動或可能遇到問題的資源。
log_tail_stream
observer
觀察RabbitMQ節點上Erlang VM(虛擬機)的運行狀況,并提供類似UNIX top命令的信息。包括進程ID、CPU使用率、內存使用情況。
Ping
它會嘗試與指定的 RabbitMQ 節點(通常是運行該命令所在的節點,除非你明確指定了其他節點)建立連接,并發送一個“ping”請求。如果 RabbitMQ 服務正在運行并且響應了這個請求,那么你會看到一個成功的消息,表明你能夠與 RabbitMQ 節點進行通信。
rabbitmq-plugins
【用于插件的開閉管理】
打印插件列表
rabbitmq-plugins list
開啟插件
禁用插件
rabbitmq-streams
用于流的維護任務
rabbitmq-upgrade
與升級相關的維護任務
post_upgrade
運行升級后任務。在當前版本中,它會在集群中的所有節點上執行鏡像和仲裁隊列的重新平衡。
await_online_quorum_plus_one
等待所有仲裁隊列的在線仲裁數高于最低值。這可確保目標節點關閉時不會有任何隊列失去仲裁數。
drain
將節點置于維護模式。此類節點將不會為任何客戶端流量提供服務,也不會考慮托管任何隊列領導者副本。
revive
使節點退出維護狀態并進入常規操作模式。此類節點將再次為客戶端流量提供服務,并考慮將其作為隊列領導者副本放置。
rabbitmqadmin
用于通過HTTP API執行操作員任務
在開啟了rabbitmq_management 插件后,可以使用以下命令下載rabbitmqadmin
創建queue
# 默認創建classic類型的queue,durable設置為true,開啟持久化
rabbitmqadmin -H localhost -u guest -p guest declare queue name=my_queue durable=true# 創建quorum類型隊列,并開啟持久化
rabbitmqadmin declare queue name=queue_quorum_02 durable=true arguments='{"x-queue-type": "quorum"}'
刪除queue
rabbitmqadmin delete queue name=queue-t1-rabbitmq-test
創建exchange
rabbitmqadmin declare exchange name=my_exchange-01 type=direct durable=true
綁定exchange和queue并制定routing_key
rabbitmqadmin -u guest -p guest declare binding source=my_exchange destination=my_queue routing_key=my_routing_key
查看綁定
rabbitmqadmin list bindings
設置classic隊列鏡像復制策略
rabbitmqadmin declare policy name=ha-three-replicas pattern="^queue_name$" definition='{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' apply-to=queues
列出鏡像策略
rabbitmqadmin list policies
發布消息
rabbitmqadmin publish routing_key=t1_queue_01 payload="hello world 001"
使用路由轉發消息
rabbitmqadmin publish routing_key=t1_queue_01 exchange=topic-exchanges-03 payload="hello world 002"
查看消息,不消費
rabbitmqadmin get queue=t1_queue_01
清空隊列中的消息
rabbitmqadmin purge queue name=queue-quorum-01