1、RabbitMQ簡單介紹
在平常工做環境中,你是否遇到過兩個(多個)系統間須要經過定時任務來同步某些數據?你是否在爲異構系統的不一樣進程間相互調用、通信的問題而苦惱、掙扎?若是是,那麼恭喜你,消息服務讓你能夠很輕鬆地解決這些問題。消息服務擅長於解決多系統、異構系統間的數據交換(消息通知/通信)問題,你也能夠把它用於系統間服務的相互調用,即適用於雲計算集羣的遠程調用(RPC)。毫無疑問,RabbitMQ就是當前最主流的消息中間件之一。node
AMQP(Advanced Message Queuing Protocol)即高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。linux
2、CentOS7下部署RabbitMQ記錄c++
因爲RabbitMQ是經過Erlang來開發的,須要須要安裝Erlang,然而在安裝Erlang的時候又有一大波依賴須要安裝,可是鬱悶的是這些依賴不在CentOS默認的yum庫中。 1)添加Erlang Solutions key 支持 [root@sh-op-mq01 ~]# rpm --import http://binaries.erlang-solutions.com/debian/erlang_solutions.asc [root@sh-op-mq01 ~]# wget http://binaries.erlang-solutions.com/rpm/centos/erlang_solutions.repo 2)安裝Erlang [root@sh-op-mq01 ~]# yum install epel-release [root@sh-op-mq01 ~]# yum install erlang 3)安裝RabbitMQ [root@sh-op-mq01 ~]# rpm -ivh http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm [root@sh-op-mq01 ~]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm [root@sh-op-mq01 ~]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm 4)優化配置 [root@sh-op-mq01 ~]# cat /etc/security/limits.conf ....... * soft nofile 65535 * hard nofile 65535 [root@sh-op-mq01 ~]# ulimit -n 65535 [root@sh-op-mq01 ~]# vim /etc/sysctl.conf //添加下面一行 fs.file-max = 100000 [root@sh-op-mq01 ~]# sysctl -p 5)啓動RabbitMQ [root@sh-op-mq01 ~]# systemctl enable rabbitmq-server.service [root@sh-op-mq01 ~]# systemctl start/restart/stop/status rabbitmq-server.service RabbitMQ默認監聽端口是15672 [root@sh-op-mq01 rabbitmq]# lsof -i:15672 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME beam.smp 12776 rabbitmq 50u IPv4 582895 0t0 TCP *:15672 (LISTEN) 默認RabbitMQ的安裝目錄路徑是/var/lib/rabbitmq、默認log路徑是/var/log/rabbitmq/ [root@sh-op-mq01 ~]# rabbitmqctl --help [root@sh-op-mq01 ~]# rabbitmqctl status [root@sh-op-mq01 ~]# rabbitmqctl environment 6) 能夠自定義RabbitMQ配置 [root@sh-op-mq01 ~]# cd /etc/rabbitmq/ [root@sh-op-mq01 rabbitmq]# cat rabbitmq-env.conf LOG_BASE=/data/log/rabbitmq //定義RabbitMQ的日誌路徑 [root@sh-op-mq01 rabbitmq]# mkdir /data/log/rabbitmq [root@sh-op-mq01 rabbitmq]# chown -R rabbitmq.rabbitmq /data/log/rabbitmq 重啓RabbitMQ [root@sh-op-mq01 rabbitmq]# systemctl restart rabbitmq-server.service rabbit-server當前狀態 [root@sh-op-mq01 rabbitmq]# rabbitmqctl status Status of node 'rabbit@sh-op-mq01' ... [{pid,12776}, {running_applications, [{rabbitmq_management,"RabbitMQ Management Console","3.6.5"}, {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.5"}, {webmachine,"webmachine","1.10.3"}, {mochiweb,"MochiMedia Web Server","2.13.1"}, {rabbitmq_management_agent,"RabbitMQ Management Agent","3.6.5"}, {rabbit,"RabbitMQ","3.6.5"}, {os_mon,"CPO CXC 138 46","2.2.14"}, {ssl,"Erlang/OTP SSL application","5.3.3"}, {public_key,"Public key infrastructure","0.21"}, {crypto,"CRYPTO version 2","3.2"}, {amqp_client,"RabbitMQ AMQP Client","3.6.5"}, {rabbit_common,[],"3.6.5"}, {inets,"INETS CXC 138 49","5.9.8"}, {mnesia,"MNESIA CXC 138 12","4.11"}, {compiler,"ERTS CXC 138 10","4.9.4"}, {xmerl,"XML parser","1.3.6"}, {syntax_tools,"Syntax tools","1.6.13"}, {asn1,"The Erlang ASN1 compiler version 2.0.4","2.0.4"}, {ranch,"Socket acceptor pool for TCP protocols.","1.2.1"}, {sasl,"SASL CXC 138 11","2.3.4"}, {stdlib,"ERTS CXC 138 10","1.19.4"}, {kernel,"ERTS CXC 138 10","2.16.4"}]}, {os,{unix,linux}}, {erlang_version, "Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:8:8] [async-threads:128] [hipe] [kernel-poll:true]\n"}, {memory, [{total,61117832}, {connection_readers,0}, {connection_writers,0}, {connection_channels,0}, {connection_other,2800}, {queue_procs,2800}, {queue_slave_procs,0}, {plugins,669584}, {other_proc,19656864}, {mnesia,67096}, {mgmt_db,521824}, {msg_index,39960}, {other_ets,1445264}, {binary,29648}, {code,27158116}, {atom,992409}, {other_system,10531467}]}, {alarms,[]}, ........... ........... ------------------------------------------------------------------------ 能夠用下面命令安裝更新維護插件: [root@sh-op-mq01 rabbitmq]# rabbitmq-plugins enable rabbitmq_management [root@sh-op-mq01 rabbitmq]# systemctl restart rabbitmq-server.service
在瀏覽器裏輸入http://localhost:15672訪問RabbitMQ,默認用戶名和密碼都是guest,若能正常訪問和登錄,即說明正常鏈接RabbitMQweb
若是使用默認的guest/guest帳號密碼登錄不上,解決辦法以下:vim
[root@sh-op-mq01 rabbitmq]# vim /etc/rabbitmq/rabbitmq.config [{rabbit, [{loopback_users, []}]}]. [root@sh-op-mq01 rabbitmq]# systemctl restart rabbitmq-server.service 而後使用guest/guest登錄便可! -------------------------------------------------------------------------------- 若是仍是使用guest/guest登錄不上RabbitMQ,能夠本身建立了一個帳戶,賦予管理員權限 [root@sh-op-mq01 rabbitmq]# rabbitmqctl add_user username password [root@sh-op-mq01 rabbitmq]# rabbitmqctl set_user_tags username administrator 建立完後用如下命令查看建立完的帳號 [root@sh-op-mq01 rabbitmq]# rabbitmqctl list_users
===================Web插件的用戶配置管理===================centos
1)用戶管理 用戶管理包括增長用戶,刪除用戶,查看用戶列表,修改用戶密碼,設置用戶角色,權限等等。 新增一個用 # rabbitmqctl add_user Username Password 刪除一個用戶 # rabbitmqctl delete_user Username 修改用戶的密碼 # rabbitmqctl oldPassword Username newPassword 查看當前用戶列表 # rabbitmqctl list_users 2)用戶角色 按照我的理解,用戶角色可分爲五類,超級管理員, 監控者, 策略制定者, 普通管理者以及其餘。 超級管理員(administrator) 可登錄管理控制檯(啓用management plugin的狀況下),可查看全部的信息,而且能夠對用戶,策略(policy)進行操做。 監控者(monitoring) 可登錄管理控制檯(啓用management plugin的狀況下),同時能夠查看rabbitmq節點的相關信息(進程數,內存使用狀況,磁盤使用狀況等) 策略制定者(policymaker) 可登錄管理控制檯(啓用management plugin的狀況下), 同時能夠對policy進行管理。但沒法查看節點的相關信息(上圖紅框標識的部分)。 普通管理者(management) 僅可登錄管理控制檯(啓用management plugin的狀況下),沒法看到節點信息,也沒法對策略進行管理。 其餘 沒法登錄管理控制檯,一般就是普通的生產者和消費者。 瞭解了這些後,就能夠根據須要給不一樣的用戶設置不一樣的角色,以便按需管理。 設置用戶角色的命令爲: # rabbitmqctl set_user_tags User Tag User爲用戶名, Tag爲角色名(對應於上面的administrator,monitoring,policymaker,management,或其餘自定義名稱)。 也能夠給同一用戶設置多個角色,例如 # rabbitmqctl set_user_tags hncscwc monitoring policymaker 3)用戶權限 用戶權限指的是用戶對exchange,queue的操做權限,包括配置權限,讀寫權限。配置權限會影響到exchange,queue的聲明和刪除。讀寫權限影響到從queue裏取消息, 向exchange發送消息以及queue和exchange的綁定(bind)操做。 例如:將queue綁定到某exchange上,須要具備queue的可寫權限,以及exchange的可讀權限;向exchange發送消息須要具備exchange的可寫權限;從queue裏取數據 須要具備queue的可讀權限。詳細請參考官方文檔中"Howpermissions work"部分。 相關命令爲: 設置用戶權限 # rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP 查看(指定hostpath)全部用戶的權限信息 # rabbitmqctl list_permissions [-p VHostPath] 查看指定用戶的權限信息 # rabbitmqctl list_user_permissions User 清除用戶的權限信息 # rabbitmqctl clear_permissions [-pVHostPath] User 4)實際應用配置 根據以上講解,進行用戶的簡單建立: # rabbitmqctl add_user admin admin # rabbitmqctl set_user_tags admin administrator # rabbitmqctl list_users
----------------------CentOS6安裝rabbitmq----------------------------瀏覽器
1)安裝erlang 安裝依賴包 # yum install xmlto gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel wxBase wxGTK wxGTK-gl perl -y 安裝elang 下載地址:https://pan.baidu.com/s/1nuGy64h 提取密碼:fv9r # yum install -y erlang-19.0.4-1.el6.x86_64.rpm # erl -v 安裝rabbitmq 下載地址:https://pan.baidu.com/s/1slJU2iL 提取密碼:zxwb # wget --no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo # yum install -y socat # rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc # yum install -y rabbitmq-server-3.6.8-1.el6.noarch.rpm 啓動RabbitMQ 啓動web管理界面(啓動後,15672端口就起來了)(這個要先啓動rabbitmq-server服務後才能啓動這個) # rabbitmq-plugins enable rabbitmq_management # lsof -i:15672 啓動服務 # service rabbitmq-server start 添加用戶admin # rabbitmqctl add_user admin 123456 設置admin角色爲管理員 # rabbitmqctl set_user_tags admin administrator 設置admin默認vhost("/")訪問權限 # rabbitmqctl set_permissions -p "/" admin "." "." ".*" 刪除guest用戶 # rabbitmqctl delete_user guest 修改guest用戶的密碼 命令:rabbitmqctl change_password Username Newpassword # rabbitmqctl change_password guest guest 查看當前用戶列表 # rabbitmqctl list_users 瀏覽器訪問:http://IP:15672 用戶名admin,密碼123456進行登陸 注意幾點: rabbitmq的默認監聽端口5672;web管理端口是15672 ---------------------------------------------------------------------- 或者採用下面方式安裝 # wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm # rpm -Uvh erlang-solutions-1.0-1.noarch.rpm # yum -y install erlang # erl -v # wget –no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo # yum install socat # wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm # yum -y install rabbitmq-server-3.6.6-1.el6.noarch.rpm 啓動rabbitmq服務: 前臺運行: # rabbitmq-server start (用戶關閉鏈接後,自動結束進程) 後臺運行: # rabbitmq-server -detached ----------------------------------------------------------------------