RabbitMQ
引言
RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。他遵循Mozilla Public License開源協議。
MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。RabbitMQ可以,多個程序同時使用RabbitMQ ,但是必須隊列名稱不一樣。采用erlang語言,屬於愛立信公司開發的。
起停服務
# 啟用web管理界面 # rabbitmq-plugins enable rabbitmq_management # 開啟服務:rabbitmq-server -detached # 關閉服務:rabbitmqctl stop (連同節點上的其它應用程序一同關閉了) # or # 關閉服務:rabbitmqctl stop_app (只關閉rabbitmq節點) # 開啟插件:rabbitmq-plugins enable 插件名 # 關閉插件:rabbitmq-plugins disable 插件名 # 檢查rabbitmq狀態:rabbitmqctl status
啟動后查看進程(已開啟web插件)
此時,即可打開瀏覽器輸入http://127.0.0.1:15672地址,進入web端(如下圖)
登陸用戶,系統默認用戶:賬號:guest 密碼:guest 角色:administration
如想新建用戶,可通過下方命令,自行創建!
默認端口
4369 (epmd), 25672 (Erlang distribution) 5672, 5671 (AMQP 0-9-1 without and with TLS) 15672 (if management plugin is enabled) 61613, 61614 (if STOMP is enabled) 1883, 8883 (if MQTT is enabled) # 特殊說明 web:15672 api_port:5672
配置文件和日志
# 默認情況下rabbitmq的日志在 /var/log/rabbitmq/rabbit@[hostname].log # 默認配置文件 /etc/rabbitmq/rabbitmq.config
用戶管理
# 新建用戶:rabbitmqctl add_user username password # 刪除用戶:rabbitmqctl delete_user username # 查看用戶列表:rabbitmqctl list_users # 查看用戶列表:rabbitmqctl list_users
例:
# 新建用戶 zhaok rabbitmqctl add_user zhaok ****** # 修改用戶密碼 zhaok rabbitmqctl change_password zhaok newpassword # 刪除用戶 zhaok rabbitmqctl delete_user zhaok
角色授權
角色大致有五類:
超級管理員administrator, 監控者monitoring, 策略制定者policymaker, 普通管理者management以及其他
角色說明:
超級管理員(administrator):可登陸管理控制台(啟用management plugin的情況下),可查看所有的信息,並且可以對用戶,策略(policy)進行操作。
監控者(monitoring):可登陸管理控制台(啟用management plugin的情況下),同時可以查看rabbitmq節點的相關信息(進程數,內存使用情況,磁盤使用情況等)
策略制定者(policymaker):可登陸管理控制台(啟用management plugin的情況下), 同時可以對policy進行管理。但無法查看節點的相關信息(上圖紅框標識的部分)
普通管理者(management):僅可登陸管理控制台(啟用management plugin的情況下),無法看到節點信息,也無法對策略進行管理。
其他(other):無法登陸管理控制台,通常就是普通的生產者和消費者。
略。。。
授權角色
# 授權角色:rabbitmqctl set_user_tags User Tag # 查看用戶角色: 可通過rabbitmqctl list_users查看 # 重新授權,直接重新執行授權命令即可
User為用戶名, Tag為角色名(對應於上面的administrator,monitoring,policymaker,management,或其他自定義名稱)
例:
# 授權單角色 rabbitmqctl set_user_tags zhaok monitoring # 授權多角色 rabbitmqctl set_user_tags zhaok monitoring policymaker
可通過查看用戶命令來查看用戶角色
權限授權
用戶授權說明(與角色之間不同,不可混淆)
rabbitmq的權限控制通過兩層來實現,一是vhost的權限,二是確認有權限訪問vhost后,對vhost內資源的權限控制(配置,讀,寫)
通俗的可以理解為:指用戶對exchange,queue的操作權限,包括配置權限,讀寫權限。配置權限會影響到exchange,queue的聲明和刪除。讀寫權限影響到從queue里取消息,向exchange發送消息以及queue和exchange的綁定(bind)操作等等
授權分三個操作:
讀:有關消費消息的任何操作,包括"清除"整個隊列
寫:發布消息
配置:隊列和交換機的創建和刪除
每一條訪問控制是由以下四部分組成:
1、被授予訪問權限的用戶
2、權限控制應用的Vhost
3、需要授權的讀/寫/配置權限組合
4、權限范圍——權限控制僅應用與客戶端命名的隊列和交換機
注:訪問控制權限是無法跨越Vhost的!!!
(1) 設置用戶權限 rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP (2) 查看(指定hostpath)所有用戶的權限信息 rabbitmqctl list_permissions [-p VHostPath] (3) 查看指定用戶的權限信息 rabbitmqctl list_user_permissions User (4) 清除用戶的權限信息 rabbitmqctl clear_permissions [-p VHostPath] User
例:
# 單用戶授權 示例:rabbitmqctl set_permissions -p broker_one producer_one ".*" ".*" ".*" # 說明:給用戶producer_one授權 vhost名稱為broker_one的 配置 寫入 讀取的權限 示例:rabbitmqctl set_permissions -p broker_one producer_one " " ".*" " " # 說明:給用戶producer_one授權 vhost名稱為broker_one的 配置 寫入 讀取的權限
特殊說明:
“---” 雙引號中的信息為正則表達式
".*" 表示配置任何隊列和交換機
"checks-.*"表示只能配置名字以"checks-"開頭的隊列和交換機
" " 不匹配隊列和交換機
virtual_host管理
新建virtual_host: rabbitmqctl add_vhost xxx 撤銷virtual_host: rabbitmqctl delete_vhost xxx 查看列表:rabbitmqctl list_vhosts
隊列管理
查看當前隊列信息:rabbitmqctl list_queues 清除所有隊列:rabbitmqctl reset
獲取服務器狀態信息
查看節點信息:rabbitmqctl cluster_status 服務器狀態:rabbitmqctl status queue信息:rabbitmqctl list_queues # 默認會查看 / 下的隊列 # 如果想看其他vhost中的,加參數 -p "vhost_name" exchange信息:rabbitmqctl list_exchanges binding信息:rabbitmqctl list_bindings connection信息:rabbitmqctl list_connections channel信息:rabbitmqctl list_channels
集群命令
集群的事宜會有詳解,暫略
查看集群狀態:rabbitmqctl cluster_status 創建集群:rabbitmqctl join_cluster 節點@主機名