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