1.服務為管理
Erlang天生就是為了讓應用程序無需知道對方是否存在同一台機器上即可互相通信。
Erlang節點:Erlang虛擬機的每個實例。多個Erlang應用程序可以運行在同一個節點之上。節點之間可以進行本地通信(不管他們是運行在同一台服務器之上)。舉例說明:一個運行在節點A上應用程序可以調用節點B上應用程序的方法,就好像調用本地函數一樣。如果應用程序由於某些原因奔潰,Erlang節點會自動嘗試重啟應用程序。
1.1啟動節點
在RabbitMQ的安裝目錄下運行./rabbitmq-server。也可以通過增加-detached參數的方式啟動RabbitMQ節點,以守護程序的方式在后台運行:./rabbitmq-server -detached.
1.2停止節點
在RabbitMQ的安裝目錄下運行:./rabbitmqctl stop時,rabbitmqctl會和本地節點通信並指示其干凈的關閉。也可以指定關閉不同的節點,包括遠程節點。只需要傳入-n rabbit@[hostname]選項即可。這時整個Rabbitmq節點包括Erlang都關閉了。
停止RabbitMQ只需要運行:./rabbitmactl stop_app即可。
1.3RabbitMQ的配置文件
[ {mnesia,[{dump_log_write_threshold,1000}]}, {rabbit,[{vm_memory_high_watermark,0.4}]} ]
rabbitmq的配置文件是一個包含了嵌套哈希表表的數組。通過外部配置數組,每個Erlang應用程序會有自己的哈希表來配置選項。
注意:RabbitMQ中的每個隊列、交換器和綁定的元數據都是保存到Mnesia的。Mnesia是內建在Erlang的非SQL數據庫。Mnesia通過將RabbitMQ元數據寫入一個僅限追加的日志文件以確保其完整性。然后在定期將日志內容轉儲到真實的Mnesia數據庫文件中。
2.請求許可
可以為連接到RabbitMQ上的用戶設置不同級別的權限(讀、寫和配置).RabbitMQ權限的好處是在於單個用戶可以跨越多個Vhost進行授權。
2.1管理用戶
在RabbitMQ中,用戶是訪問控制的基本單元。針對一到多個vhost,其可以被賦予不同級別的訪問權限,並使用標准的用戶名/密碼來認證用戶。對用戶的增加、刪除以及列出列表非常簡單。這些操作都是通過rabbitmqctl來完成。
創建用戶的命令如下:
./rabbitmqctl add_user username password
刪除用戶的命令如下:
./rabbitmqctl delete_user username
當刪除用戶的時候,任何引用該用戶的訪問控制條目都會從rabbit權限數據庫中自動刪除。
查看所有用戶的命令如下:
./rabbitmqctl list_users
修改已經存在的用戶的密碼的命令如下:
./rabbitmqctl change_password username newpassword
2.2Rabbit權限系統
如下圖是AMQP操作到Rabbitmq權限的映射關系
每一條訪問控制條目由以下四部分組成:
- 被授予訪問權限的用戶
- 權限應用的vhost
- 需要授予的讀/寫/配置權限的組合
- 權限的范圍
謹記:訪問控制條目是無法跨越vhost的。
授予權限的命令如下所示:
./rabbitmqctl set_permissions -p vhostname username ".*" ".*" ".*"
- -p vhostname:告訴了set-permissions條目應該應用到哪個vhost
- username:指定了被授予權限的用戶
- ".*" ".*" ".*":這是被授予的權限。這些值分別映射到配置、寫和讀。
".*"意味着匹配任何隊列或者交換器的名字。
"checks-.*":只匹配名字以"checks-"開頭的隊列和交換機。
"":不匹配任何隊列和交換器。
如下權限設置:
./rabbitmqctl set_permissions -p vhostname username " " "checks-.*" ".*"
可以使用Rabbitmqctl的list_permisions命令來驗證權限是否正確賦予。
./rabbitmqctl clear_permissions -p vhostname username
可以使用Rabbitmqctl的clear_premissions命令來移除一個用戶在任何vhost上的權限。如下所示:
./rabbitmqctl clear_permissions -p vhostname username
值得注意的是,clear_permissions命令會移除用戶在指定vhost上的所有權限。如果你想修改用戶現存權限,則只需要設置新的權限值並執行set_permissions即可。
如果你想查看用戶在RabbitMQ服務器上所有vhost上的權限,可以使用list_user_permissions即可。
./rabbitmqctl list_user_permissions username
3.檢查
3.1查看數據統計
列出隊列和消息數目
./rabbitmqctl list_queues [-p <VHostname>] [<QueueInfoItem>]
QueueInfoItem主要包含以下選項:
例如:
./rabbitmqctl list_queues name durable auto_delete consumers memory
查看交換器和綁定.查看交換器的命令如下:
./rabbitmqctl list_exchanges
查看綁定的命令如下:
./rabbitmqctl list_bindings
該命令不接受處-p以外的參數。
通過AMQP實時訪問日志
當使用rabbitmqctl列出交換器列表時看到了其中一個叫做amq.rabbitmq.log的topic交換器。RabbitMQ把日志信息發布到該交換器上,並以嚴重級別作為路由鍵---error、warning和info.可以通過創建一個消費者來監聽日志並作出相應的反應。
4.修復RabbitMQ:疑惑解答
Erlang節點通過交換作為秘密令牌的Erlang cookie以獲得認證。由於你已連接到遠程節點后就能執行命令,因此有必要確保該節點是可信的。Erlang將令牌存儲在名為.erlang.cookie的文件。為了能讓rabbitmqctl能夠連接RabbitMQ節點,因此需要共享相同的cookie。如果運行RabbitMQ和執行rabbitmqctl命令的是同一個用戶,那么你不會有任何問題。但是在產品環境中,你可能會想要創建rabbitmq用戶,並以該用戶的身份運行服務器。這意味着你必須和rabbitmq用戶共享cookie,或者切換到rabbitmq才能成功執行rabbitmqctl。