RabbitMQ經常使用命令

RabbitMQ經常使用命令

簡介

基本概念

  1. Server(broker): 接受客戶端鏈接,實現AMQP消息隊列和路由功能的進程。
  2. Virtual Host:實際上是一個虛擬概念,相似於權限控制組,一個Virtual Host裏面能夠有若干個Exchange和Queue,可是權限控制的最小粒度是Virtual Host。
  3. Exchange:接受生產者發送的消息,並根據Binding規則將消息路由給服務器中的隊列。ExchangeType決定了Exchange路由消息的行爲,例如,在RabbitMQ中,ExchangeType有direct、Fanout和Topic三種,不一樣類型的Exchange路由的行爲是不同的。
  4. Message Queue:消息隊列,用於存儲還未被消費者消費的消息。
  5. Message: 由Header和Body組成,Header是由生產者添加的各類屬性的集合,包括Message是否被持久化、由哪一個Message Queue接受、優先級是多少等。而Body是真正須要傳輸的APP數據。
  6. Binding:Binding聯繫了Exchange與Message Queue。Exchange在與多個Message Queue發生Binding後會生成一張路由表,路由表中存儲着Message Queue所需消息的限制條件即Binding Key。當Exchange收到Message時會解析其Header獲得Routing Key,Exchange根據Routing Key與Exchange Type將Message路由到Message Queue。Binding Key由Consumer在Binding Exchange與Message Queue時指定,而Routing Key由Producer發送Message時指定,二者的匹配方式由Exchange Type決定。
  7. Connection:鏈接,對於RabbitMQ而言,其實就是一個位於客戶端和Broker之間的TCP鏈接。
  8. Channel:信道,僅僅建立了客戶端到Broker之間的鏈接後,客戶端仍是不能發送消息的。須要爲每個Connection建立Channel,AMQP協議規定只有經過Channel才能執行AMQP的命令。一個Connection能夠包含多個Channel。之因此須要Channel,是由於TCP鏈接的創建和釋放都是十分昂貴的,若是一個客戶端每個線程都須要與Broker交互,若是每個線程都創建一個TCP鏈接,暫且不考慮TCP鏈接是否浪費,就算操做系統也沒法承受每秒創建如此多的TCP鏈接。RabbitMQ建議客戶端線程之間不要共用Channel,至少要保證共用Channel的線程發送消息必須是串行的,可是建議儘可能共用Connection。
  9. Command:AMQP的命令,客戶端經過Command完成與AMQP服務器的交互來實現自身的邏輯。例如在RabbitMQ中,客戶端能夠經過publish命令發送消息,txSelect開啓一個事務,txCommit提交一個事務。

用戶角色

用戶角色分爲5中類型:node

用戶角色可分爲五類,超級管理員, 監控者, 策略制定者, 普通管理者以及其餘。shell

超級管理員(administrator)

可登錄管理控制檯(啓用management plugin的狀況下),可查看全部的信息,而且能夠對用戶,策略(policy)進行操做。數據庫

監控者(monitoring)

可登錄管理控制檯(啓用management plugin的狀況下),同時能夠查看rabbitmq節點的相關信息(進程數,內存使用狀況,磁盤使用狀況等)服務器

策略制定者(policymaker)

可登錄管理控制檯(啓用management plugin的狀況下), 同時能夠對policy進行管理。但沒法查看節點的相關信息app

普通管理者(management)

僅可登錄管理控制檯(啓用management plugin的狀況下),沒法看到節點信息,也沒法對策略進行管理。運維

其餘(none)

沒法登錄管理控制檯,一般就是普通的生產者和消費者。fetch

經常使用命令

節點管理

# 查詢節點狀態
rabbitmqctl status
# 中止RabbitMQ應用,可是Erlang虛擬機仍是處於運行狀態。此命令的執行優先於其餘管理操做,好比rabbitmqctl reset。
rabbitmqctl stop_ app 
# 啓動RabbitMQ應用。在執行了其餘管理操做以後,從新啓動以前中止的RabbitMQ應用,比rabbitmqctl reset。
rabbitmqctl start_app
# 重置RabbitMQ節點,將RabbitMQ節點重置還原到最初狀態。包括從原來所在的集羣中刪除此節點,從管理數據庫 中刪除全部的配置數據,如己配置的用戶、 vhost 等,以及刪除全部的持久化消息。執行 rabbi tmqctl reset 命令前必須中止RabbitMQ 應用。
rabbitmqctl reset
# 強制將 RabbitMQ 節點重置還原到最初狀態。不一樣於 rabbitmqctl reset 命令, rabbitmqctl force_reset 命令不論當前管理數據庫的狀態和集羣配置是什麼,都會無條件地重直節點。它只能在數據庫或集羣配置己損壞的狀況下使用。與 rabbitmqctl reset 命令同樣,執行 rabbitmqctl force_reset 命令前必須先中止 RabbitMQ 應用。
rabbitmqctl force_reset
# 指示RabbitMQ節點輪換日誌文件。RabbitMQ節點會將原來的日誌文件中的內容追加到"原 始名稱+後綴"的日誌文件中,而後再將新的日誌內容記錄到新建立的日誌中(與原日誌文件同名)。當目標文件不存在時,會從新建立。若是不指定後綴suffix. 則日誌文件只是從新打開而不會進行輪換。
rabbitmqctl rotate_logs {suffix}
# 中止運行RabbitMQ的Erlang虛擬機和RabbitMQ應用。若是RabbitMQ沒有成功關閉,則會返回一個非零值。這個命令和rabbitmqctl stop 不一樣的是,它不須要指定pid_file而能夠阻塞等待指定進程的關閉。
rabbitmqctl shutdown
# 中止運行RabbitMQ的Erlang虛擬機和RabbitMQ服務應用,其中pid_file是經過rabbitmq-server命令啓動RabbitMQ 服務時建立的,默認狀況下存放於mnesia目錄中。注意rabbitmq-server -detach 這個帶有 -detach後綴的命令來啓動 RabbitMQ 服務則不會生成 pid_file 文件。指定pid_file會等待指定進程的結束。
rabbitmqctl stop [pid_file]

插件管理

# rabbitmq-plugins [-n node] {command} [command options ...]

# 啓動插件
# rabbitmq-plugins enable [--offline] [--online] {plugin ...}
rabbitmq-plugins enable rabbitmq_management
# 禁用插件
# rabbitmq-plugins disable [--offline] [--online] {plugin ...}
rabbitmq-plugins disable  rabbitmq_management
# 表示啓用參數指定的插件,而且禁用其餘全部插件
# 沒有參數表示禁用全部的插件
rabbitmq-plugin set rabbitmq_management
# 顯示全部的插件,每一行一個
rabbitmq-plugins list
# 顯示全部的插件,而且顯示插件的版本號和描述信息
rabbitmq-plugins list -v
# 顯示全部名稱含有 "management" 的插件
rabbitmq-plugins list -v management
# 顯示全部顯示或者隱式啓動的插件
rabbitmq-plugins list -e rabbit

對象管理

# name:羅列出全部虛擬機,tracing:表示是否使用了 RabbitMQ 的 trace 功能
rabbitmqctl list_vhosts [name,tracing]
# 查看交換器
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
# 查看綁定關係的細節
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
# 查看已聲明的隊列
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...] 
# 返回 TCP!IP鏈接的統計信息。
rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...]
# 返回當前全部信道的信息。
rabbitmqctl list_channels [channelinfoitem ...]
# 列舉消費者信息 每行將顯示由製表符分隔的己訂閱隊列的名稱、相關信道的進程標識、consumerTag、是否須要消費端確認 prefetch_count 及參數列表這些信息。
rabbitmqctl list_consumers [-p vhost]

# 建立一個新的 vhost ,大括號裏的參 數表示 vhost 的名稱。
rabbitmqctl add vhost {vhostName}
# 刪除一個vhost,同時也會刪除其下全部的隊列、交換器、綁定關係、 用戶權限、參數和策略等信息。
rabbitmqctl delete_vhost {vhostName}
# RabbitMQ 中的授予權限是指在 vhost 級別對用戶而言的權限授予。
rabbitmqctl set permissions [-p vhostName] {userName} {conf} {write} {read} 
# 對RabbitMQ 節點進行健康檢查,確認應用是否正常運行、list_queues list_channels 是否可以正常返回等。
rabbitmqctl node_health_check
# 顯示每一個運行程序環境中每一個變量的名稱和值。
rabbitmqctl environment
# 爲全部服務器狀態生成一個服務器狀態報告,井將輸出重定向到一個文件:rabbitmqctl report > report.txt
rabbitmqctl report
# 顯示 Broker 的狀態,好比當前 Erlang 節點上運行的應用程序、RabbitMQ/Erlang的版本信息、os 的名稱、內 存及文件描述符等統計信息。
rabbitmqctl status

# 策略管理
# 策略查看
rabbitmqctl list_policies [-p <vhost>]
# 策略設置
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>
# 策略清除
rabbitmqctl clear_policy [-p <vhost>] <name>

集羣管理

# 顯示集羣的狀態
rabbitmqctl cluster_status 
# 將節點加入指定集羣中。在這個命令執行前須要中止 RabbitMQ應用井重置節點。
rabbitmqctl joio_cluster {cluster_node} [--ram] 
# 修改集羣節點的類型。在這個命令執行前須要中止 RabbitMQ應用。
rabbitmqctl change_cluster_node_type {disclram}
# 將節點從集羣中刪除,容許離線執行。
rabbitmqctl forget_cluster_node [--offiine] 

# 來查看那些slaves已經完成同步:
rabbitmqctl list_queues {queue_name} {slave_pids} synchronised_slave_pids
# 手動的方式同步一個queue:
rabbitmqctl sync_queue {queue_name}
# 取消某個queue的同步功能:
rabbitmqctl cancel_sync_queue {queue_name}

用戶管理

# 查看用戶列表
rabbitmqctl list_users
# 刪除用戶
rabbitmqctl delete_user {username}
# 清除用戶密碼
rabbitmqctl clear_password {username}
# 修改密碼
rabbitmqctl change_password {username} {newPassword}
# 驗證用戶
rabbitmqctl authentiçate_user {username} {passWord}
# 新增用戶
rabbitmqctl add_user {username} {password}
# 給用戶受權
rabbitmqctl set_user_tags {username} {roles}
# 清楚用戶對某個虛擬機的權限。
rabbitmqctl clear_permissions [-p vhostName] {username}
# 用來顯示虛擬主機上的權限。
rabbitmqctl list_permissions [-p vhost] 
# 用來顯示用戶在已分配虛擬機上的權限。
rabbitmqctl list_user_permissions {username}

命令實戰

用戶操做

# 能夠建立管理員用戶,負責整個MQ的運維
rabbitmqctl add_user admin adminpasspord
# 賦予其administrator角色
rabbitmqctl set_user_tags admin administrator
# 建立RabbitMQ監控用戶,負責整個MQ的監控
rabbitmqctl add_user  user_monitoring  passwd_monitor  
# 賦予其monitoring角色
rabbitmqctl set_user_tags user_monitoring monitoring
相關文章
相關標籤/搜索