RabbitMQ 從入門到精通:從工作模式到集群部署實戰(三)

文章目錄

    • 使用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命令時需要注意以下幾點

  1. 數據丟失風險:如果你移除的節點是磁盤節點,并且上面存儲了集群的元數據(例如,它是集群中的一個原始節點或它持有隊列的元數據),那么這些數據將會丟失。因此,在移除節點之前,請確保你已經做好了必要的數據備份。
  2. 集群一致性:在移除節點之前,請確保集群中的其他節點都是健康的,并且集群處于一致狀態。否則,移除節點可能會導致集群進入不一致狀態。
  3. 停止節點:在移除節點之前,通常建議先停止該節點上的RabbitMQ服務。這可以通過rabbitmqctl stop命令來實現。然而,如果你使用了–offline參數,那么即使節點沒有停止,你也可以從集群中移除它。但請注意,這樣做可能會增加數據丟失的風險。
  4. 重新平衡:移除節點后,你可能需要手動重新平衡集群中的隊列和連接,以確保集群的性能和可靠性。

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
  1. 如果當前節點上有運行可升級副本的隊列,則以非零代碼退出健康檢查。
  2. 當你使用 quorum 隊列時,這是一種提供高可用性(HA)和數據一致性的隊列類型。它依賴于多個隊列副本(replicas)來確保消息不會丟失,并且隊列可以在集群的節點之間可靠地遷移。在創建或重新配置 quorum 隊列后,這些隊列副本需要進行初始同步,以確保所有副本都擁有相同的消息狀態。
  3. 這個操作或檢查,通常是在自動化腳本或監控系統中進行的,目的是確認新添加的或重新配置的 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算法實現,這對于集群的一致性和兼容性很重要。
  • 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/68168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68168.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3.攻防世界 weak_auth

題目描述提示 是一個登錄界面&#xff0c;需要密碼登錄 進入題目頁面如下 弱口令密碼爆破 用1 or 1 #試試 提示用admin登錄 則嘗試 用戶名admin密碼&#xff1a;123456 直接得到flag 常用弱口令密碼&#xff08;可復制&#xff09; 用戶名 admin admin-- admin or -- admin…

優化深度神經網絡

訓練集、開發集(驗證集)、測試集 偏差與方差 正則化 L2正則 Dropout 隨機丟棄部分神經元輸入&#xff0c;經常用于計算機視覺的神經網絡內&#xff0c;因為通常沒有足夠的訓練數據&#xff0c;很容易出現過擬合的問題 數據增強 訓練集規一化 可以使其圖像更均勻&#xff0c;…

【玩轉 Postman 接口測試與開發2_018】第14章:利用 Postman 初探 API 安全測試

《API Testing and Development with Postman》最新第二版封面 文章目錄 第十四章 API 安全測試1 OWASP API 安全清單1.1 相關背景1.2 OWASP API 安全清單1.3 認證與授權1.4 破防的對象級授權&#xff08;Broken object-level authorization&#xff09;1.5 破防的屬性級授權&a…

Spring @PropertySource:讓你的應用配置更加模塊化和可維護

PropertySource注解在Spring中的作用&#xff0c;就像是給Spring應用配了一個“外部配置箱”。 想象一下&#xff0c;你在開發一個Spring應用時&#xff0c;有很多配置信息需要設置&#xff0c;比如數據庫的連接信息、應用的某些功能開關等。如果這些信息都硬編碼在代碼中&…

RK3576——USB3.2 OTG無法識別到USB設備

問題&#xff1a;使用硬盤接入到OTG接口無熱插拔信息&#xff0c;接入DP顯示屏無法正常識別到顯示設備&#xff0c;但是能通過RKDdevTool工具燒錄系統。 問題分析&#xff1a;由于熱插拔功能實現是靠HUSB311芯片完成的&#xff0c;因此需要先確保HUSB311芯片驅動正常工作。 1. …

docker-compose 配置nginx

前言 前端打包的dist文件在宿主機&#xff0c;nginx運行在docker-compose 問題 nginx.conf 在本地配置可以生效&#xff0c;但是鏈接到容器就報錯 基于本地的nginx運行&#xff0c;本地nginx.conf 如下 server {listen 8081;location / {root /usr/local/software/testweb/…

基于SpringBoot+ Vue的家教管理系統

隨著互聯網技術的發展&#xff0c;信息化管理已經深入到各個行業中。在教育領域&#xff0c;家教管理系統的需求日益增長。傳統的手工管理方式在面對大量信息時&#xff0c;容易出現管理效率低下、數據錯誤率高、修改困難等問題。本文將介紹基于Spring Boot框架、MySQL數據庫開…

【數據結構】樹哈希

目錄 一、樹的同構1. 定義2. 具體理解(1) 結點對應(2) 孩子相同(3) 遞歸性質 3. 示例 二、樹哈希1.定義2.哈希過程&#xff08;1&#xff09;葉節點哈希&#xff08;2&#xff09;非葉節點哈希&#xff08;3&#xff09;組合哈希值 3.性質&#xff08;1&#xff09; 唯一性 \re…

使用DeepSeek的技巧筆記

來源&#xff1a;新年逼自己一把&#xff0c;學會使用DeepSeek R1_嗶哩嗶哩_bilibili 前言 對于DeepSeek而言&#xff0c;我們不再需要那么多的提示詞技巧&#xff0c;但還是要有兩個注意點&#xff1a;你需要理解大語言模型的工作原理與局限,這能幫助你更好的知道AI可完成任務…

【工具篇】ChatGPT:開啟人工智能新紀元

一、ChatGPT 是什么 最近,ChatGPT 可是火得一塌糊涂,不管是在科技圈、媒體界,還是咱們普通人的日常聊天里,都能聽到它的大名。好多人都在討論,這 ChatGPT 到底是個啥 “神器”,能讓大家這么著迷?今天咱就好好嘮嘮。 ChatGPT,全稱是 Chat Generative Pre-trained Trans…

【centOS】搭建公司內網git環境-GitLab 社區版(GitLab CE)

1. 安裝必要的依賴 以 CentOS 7 系統為例&#xff0c;安裝必要的依賴包&#xff1a; sudo yum install -y curl policycoreutils openssh-server openssh-clients postfix sudo systemctl start postfix sudo systemctl enable postfix2. 添加 GitLab 倉庫 curl -sS https:/…

$route 和 $router 的區別是什么?

在 Vue Router 中,$route 和 $router 是兩個不同的對象,它們各自承擔著不同的角色。下面是它們的主要區別: 一、$route 定義$route 是當前路由的信息對象,包含了與當前路由相關的狀態和參數。它是一個只讀對象。 2. 主要屬性 params:動態路由參數,例如 /user/:id 中的 …

node.js 08 express的使用和熱重載nodemon的安裝

一.express的安裝和使用 安裝 npm i express 使用 //引入express const express require(express)//啟動服務器 const app express()//設置get請求地址&#xff0c;獲取請求地址信息&#xff0c;和發送返回的數據 app.get(/bailan,(req, res) > {//req.query可以獲取到客…

Python因為網絡原因安裝依賴庫報錯

現象 在終端運行以下指令 pip install pyautogui pillow keyboard 出現報錯&#xff0c;終端信息如下&#xff1a; PS D:\code\Python> pip install pyautogui pillow keyboard Collecting pyautoguiUsing cached PyAutoGUI-0.9.54.tar.gz (61 kB)Installing build depe…

面試問題記錄1

問題一&#xff1a;性能測試步驟 性能測試步驟主要包括以下幾個階段&#xff1a; ?1. 需求分析階段? 明確測試目標&#xff0c;了解性能測試需求&#xff0c;包括業務列表、性能指標、測試環境、數據量等詳細需求?12。熟悉項目相關的資源&#xff0c;如架構設計、軟硬件環…

開源 GPU 集群管理器 GPUStack 輕松拉起deepseek各版本模型

GPUStack 是一個用于運行 AI 模型的開源 GPU 集群管理器。 項目地址&#xff1a;gpustack/gpustack: Manage GPU clusters for running AI modelshttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustackhttps://githu…

ESP32開發學習記錄---》GPIO

she 2025年2月5日&#xff0c;新年后決定開始充電提升自己&#xff0c;故作此記,以前沒有使用過IDF開發ESP32因此新年學習一下ESP32。 ESPIDF開發環境配置網上已經有很多的資料了&#xff0c;我就不再贅述&#xff0c;我這里只是對我的學習經歷的一些記錄。 首先學習一個…

3-kafka服務端之控制器

文章目錄 概述控制器的選舉與故障恢復控制器的選舉故障恢復 優雅關閉分區leader的選舉 概述 在Kafka集群中會有一個或多個broker&#xff0c;其中有一個broker會被選舉為控制器&#xff08;Kafka Controler&#xff09;&#xff0c;它負責管理整個集群中所有分區和副本的狀態。…

物聯網的三層架構:感知層、網絡層與應用層

物聯網&#xff08;Internet of Things, IoT&#xff09;作為現代科技的重要組成部分&#xff0c;正在深刻改變我們的生活和工作方式。它將物理世界與數字世界無縫連接&#xff0c;通過智能設備、傳感器和網絡技術&#xff0c;實現數據的采集、傳輸和應用。物聯網的架構通常分為…

react的antd表單校驗,禁止輸入空格并觸發校驗提示

首先需要用到form組件&#xff0c;在form.item內添加rules屬性&#xff0c;寫正則表達式 <Form.Itemlabel"員工姓名"name"name"rules{[{ required: true, message: 員工姓名 },{ pattern: /^(?!\s*$).$/, message: 不能全是空格 },]}> <Input p…