rabbitmq依賴于Erlang,需先安裝,推薦安裝rabbitmq/erlang-rpm:
#clone源碼git clone https://github.com/rabbitmq/erlang-rpm.git#makecd erlang-rpmmake? #需要等待較長時間cd RPMS/x86_64? #其下有兩個rpm包 erlang-19.3.6-1.alios6.x86_64.rpm? erlang-debuginfo-19.3.6-1.alios6.x86_64.rpm, 選擇前者安裝#安裝sudo rpm -ivh? erlang-19.3.6-1.alios6.x86_64.rpm
在官網(wǎng)下載頁面找到和系統(tǒng)版本對應的rabbitmq版本:
#安裝rabbitmq-serversudo yum install rabbitmq-server-3.6.10-1.el6.noarch.rpm#此時可能報:Requires: socat, 以下是解決方法, 參考:http://www.cnblogs.com/ray30th/p/6651800.htmlsudo wget --no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.reposudo yum makecachesudo yum install socat#重新安裝rabbitmq-serversudo yum install rabbitmq-server-3.6.10-1.el6.noarch.rpm
啟動/關閉/狀態(tài)查看
#啟動/停止 start/stop$sudo /sbin/service rabbitmq-server startStarting rabbitmq-server: SUCCESSrabbitmq-server.$sudo /sbin/service rabbitmq-server stopStopping rabbitmq-server: rabbitmq-server.#狀態(tài)查看sudo rabbitmqctl status
SELinux和與其機制類似的系統(tǒng)可能會阻止RabbtMQ綁定相應端口,所以安裝完之后需要確保一下端口可以打開:
4369,epmd(Erlang Port Mapper Daemon),是Erlang的端口/結點名稱映射程序,用來跟蹤節(jié)點名稱監(jiān)聽地址,在集群中起到一個類似DNS的作用。
5672, 5671, AMQP 0-9-1 和 1.0 客戶端端口,used by AMQP 0-9-1 and 1.0 clients without and with TLS(Transport Layer Security)
25672,Erlang distribution,和4369配合
15672,HTTP_API端口,管理員用戶才能訪問,用于管理RbbitMQ,需要啟用management插件,rabbitmq-plugins enable rabbitmq_management,訪問http://server-name:15672/
61613, 61614,當STOMP插件啟用的時候打開,作為STOMP客戶端端口(根據(jù)是否使用TLS選擇)
1883, 8883,當MQTT插件啟用的時候打開,作為MQTT客戶端端口(根據(jù)是否使用TLS選擇)
15674,基于WebSocket的STOMP客戶端端口(當插件Web STOMP啟用的時候打開)
15675,基于WebSocket的MQTT客戶端端口(當插件Web MQTT啟用的時候打開)
參考
Installing on RPM-based Linux(Port Access)
用戶權限管理
RabbitMQ有一個默認的用戶"guest",密碼也是"guest",這個用戶默認只能通過本機訪問,eg:http://localhost:15672/,在通過http訪問之前記得啟用management插件:
$rabbitmq-pluginsenablerabbitmq_management
要讓其他機器可以訪問,需要創(chuàng)建一個新用戶,為其分配權限。用戶權限可以通過rabbitmqctl執(zhí)行相關命令來維護,rabbitmqctl是管理rabbitmq的命令行管理工具,下面介紹相關的命令:
用戶管理
list_users,用戶列表
add_user {username} {password},添加用戶
delete_user {username},刪除用戶
change_password {username} {newpassword},修改密碼
clear_password {username},刪除密碼,密碼刪除后就不能訪問了。This user now cannot log in with a password (but may be able to through e.g. SASL EXTERNAL if configured)
authenticate_user {username} {password},用戶認證
set_user_tags {username} {tag...},為用戶設置角色,tag可以是0個、一個、或多個,eg:rabbitmqctl set_user_tags chris administrator,設置為管理員;rabbitmqctl set_user_tags chris,清除chris與角色的關聯(lián)。
#用戶列表查看$sudo rabbitmqctl list_usersListing usersguest? [administrator]#添加用戶$sudo rabbitmqctl add_user chris 123Creating user "chris"#為用戶分配權限$sudo rabbitmqctl set_user_tags chris administratorSetting tags for user "chris" to [administrator]#然后就可以通過http://host:15672 登錄management界面管理rabbitmq了,但此時用戶chris還沒有訪問隊列資源的權限
權限管理
RabbitMQ客戶端連接到一個服務端的時候,在它的操作指令中指定了一個虛擬主機。服務端首先檢查是否有訪問該虛擬主機的權限,沒有權限的會拒絕連接。
對于exchanges和queues等資源,位于某個虛擬主機內;不同虛擬主機內即便名稱相同也代表不同的資源。當特定操作在資源上執(zhí)行時第二級訪問控制開始生效。
RabbitMQ在某個資源上區(qū)分了配置、寫和讀操作。配置操作創(chuàng)建或者銷毀資源,或者更改資源的行為。寫操作將消息注入進資源之中。讀操作從資源中獲取消息。
要執(zhí)行特定操作用戶必須授予合適的權限。
下面介紹相關命令:
list_vhosts [vhostinfoitem...],獲取vhosts列表
add_vhost {vhost}, eg:rabbitmqctl add_vhost test
delete_vhost {vhost}
set_permissions [-pvhost] {user} {conf} {write} {read},給用戶分在對應的vhost上分配相應的權限。eg:rabbitmqctl set_permissions -p /myvhost chris "^chris-.*" ".*" ".*",這條指令,給用戶chris在myvhost分配了權限,權限包括:以"chris-"開頭的全部資源的配置權限,和所有資源的讀寫權限
clear_permissions [-pvhost] {username},清除權限
list_permissions [-pvhost],vhost權限分配列表
list_user_permissions {username},user權限列表
$sudo rabbitmqctl set_permissions -p / chris".*"".*"".*"Setting permissions for user "chris" in vhost "/"#此時用戶chris才有訪問隊列資源的權限
參考
rabbitmqctl(1) manual page(User management, Access control)
System Limits
rabbitmq會維持大量的網(wǎng)絡連接,所以系統(tǒng)允許同時打開的最大文件數(shù)需要調整。推薦的允許同時打開的最大文件數(shù)為65535。有兩個地方需要設置:
系統(tǒng)每個用戶允許的最大同時打開文件數(shù),ulimit -n,可以通過ulimit -n size設置
系統(tǒng)允許的最大同時打開文件數(shù),fs.file-max
系統(tǒng)級限制查看與設置:
#查看$ cat /proc/sys/fs/file-max184289$ cat /proc/sys/fs/file-nr1024? ? 0? ? 184289#已分配文件句柄的數(shù)目? ? 分配了但沒有使用的句柄數(shù)? 文件句柄最大數(shù)目#設置$echo284289 > /proc/sys/fs/file-max