您好,登錄后才能下訂單哦!
博文大綱:
一、MQ簡(jiǎn)介
二、什么是RabbitMQ?
三、安裝RabbitMQ
四、部署Rabbitmq集群
1)部署環(huán)境
2)安裝rabbitmq服務(wù)
3)配置host文件,并將上述兩個(gè)節(jié)點(diǎn)加入集群
4)rabbitmq01配置群集并將rabbitmq02、03加入01群集
5)訪問(wèn)web界面
6)web頁(yè)面添加vhost
五、單臺(tái)節(jié)點(diǎn)加入或退出群集
1)單節(jié)點(diǎn)加入集群
2)單節(jié)點(diǎn)退出集群
MQ全稱為Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過(guò)讀寫出入隊(duì)列的消息(針對(duì)應(yīng)用程序的數(shù)據(jù))來(lái)通信,而無(wú)需專用連接來(lái)鏈接它們。消息傳遞指的是程序之間通過(guò)在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過(guò)直接調(diào)用彼此來(lái)通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過(guò)程調(diào)用的技術(shù)。排隊(duì)指的是應(yīng)用程序通過(guò) 隊(duì)列來(lái)通信。隊(duì)列的使用除去了接收和發(fā)送應(yīng)用程序同時(shí)執(zhí)行的要求。
RabbitMQ是由Erlang語(yǔ)言編寫的實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開(kāi)源消息代理軟件(也可稱為 面向消息的中間件)。支持Windows、Linux/Unix、MAC OS X操作系統(tǒng)和包括JAVA在內(nèi)的多種編程語(yǔ)言。
AMQP,即Advanced Message Queuing Protocol,一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開(kāi)放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同的開(kāi)發(fā)語(yǔ)言等條件的限制。
RabbitMQ使用場(chǎng)景:
1)異步處理;
2)應(yīng)用解耦;
3)流量削峰;
4)消息通訊;
所需軟件下載鏈接:https://pan.baidu.com/s/1vopw5bvLX4gUkabSthI0hw 提取碼:ng8c
[root@localhost ~]# ls #確認(rèn)所需RPM包
erlang-18.1-1.el6.x86_64.rpm
rabbitmq-server-3.6.6-1.el6.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost ~]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
#安裝RPM包
[root@localhost ~]# chkconfig rabbitmq-server on
#rabbitmq加入開(kāi)機(jī)自啟
[root@localhost ~]# /etc/init.d/rabbitmq-server start
#啟動(dòng)rabbitmq服務(wù)
[root@localhost ~]# ps -ef | grep rabbitmq
#確定rabbitmq正在運(yùn)行,返回結(jié)果較多,省略
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
#開(kāi)啟rabbitmq的web管理插件,以便可以通過(guò)瀏覽器進(jìn)行訪問(wèn)
[root@localhost ~]# rabbitmqctl add_user admin 123.com
#創(chuàng)建登錄用戶
#默認(rèn)WEB管理的登錄帳號(hào)和密碼統(tǒng)一為:guest
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator
#將創(chuàng)建的admin用戶添加至administrator組
默認(rèn)RabbitMQ擁有如下端口號(hào):
一般常用就15672和5672!
客戶端訪問(wèn):
Rabbitmq集群大概分為兩種方式:
1、普通模式:默認(rèn)的集群模式,消息的尸體只存在一個(gè)節(jié)點(diǎn)上;
2、鏡像模式:把需要的隊(duì)列做成鏡像,存在于多個(gè)節(jié)點(diǎn)。
ha-mode:
all:列隊(duì)到所有節(jié)點(diǎn);
exatly:隨機(jī)鏡像到其他節(jié)點(diǎn)上;
nodes:鏡像到指定節(jié)點(diǎn)上。
集群節(jié)點(diǎn)模式:
1、內(nèi)存節(jié)點(diǎn):工作在內(nèi)存上;
2、磁盤節(jié)點(diǎn):工作在磁盤上;
例外:內(nèi)存節(jié)點(diǎn)和磁盤節(jié)點(diǎn)共同存在,提高訪問(wèn)速度的同時(shí)增加數(shù)據(jù)持久化。
相比內(nèi)存節(jié)點(diǎn)雖然不寫入磁盤,但是它執(zhí)行比磁盤節(jié)點(diǎn)要好,集群中,只需要一個(gè)磁盤來(lái)保存狀態(tài)就足夠了,如果集群中只有內(nèi)存節(jié)點(diǎn),那么節(jié)點(diǎn)一旦宕機(jī),所有的狀態(tài)、消息都會(huì)丟失,無(wú)法實(shí)現(xiàn)數(shù)據(jù)的持久化。
系統(tǒng) | IP地址 | 主機(jī)名 |
---|---|---|
Centos 7 | 192.168.1.4 | rabbitmq01 |
Centos 7 | 192.168.1.5 | rabbitmq02 |
Centos 7 | 192.168.1.6 | rabbitmq03 |
Centos 7 | 192.168.1.7 | rabbitmq04 |
其中192.168.1.4就是基于上面的單臺(tái)rabbitmq做的。
在192.168.1.5和192.168.1.6兩個(gè)節(jié)點(diǎn)上部署,192.168.1.7稍后會(huì)用到!
[root@localhost ~]# ls #確認(rèn)所需RPM包
erlang-18.1-1.el6.x86_64.rpm
rabbitmq-server-3.6.6-1.el6.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost ~]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
#安裝RPM包
[root@localhost ~]# chkconfig rabbitmq-server on
#rabbitmq加入開(kāi)機(jī)自啟
[root@localhost ~]# /etc/init.d/rabbitmq-server start
#啟動(dòng)rabbitmq服務(wù)
[root@localhost ~]# echo -e "192.168.1.4 rabbitmq01\n192.168.1.5 rabbitmq02\n192.168.1.6 rabbitmq03\n192.168.1.7 rabbitmq04" >> /etc/hosts
[root@localhost ~]# scp /etc/hosts root@192.168.1.5:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.1.6:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.1.7:/etc/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.5:/var/lib/rabbitmq/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.6:/var/lib/rabbitmq/
#將rabbitmq01的cookie節(jié)點(diǎn)信息復(fù)制到其他需要加入群集的節(jié)點(diǎn)
#部署群集的時(shí)候需要節(jié)點(diǎn)cookie信息一致
群集中的所有節(jié)點(diǎn)都需重啟(包括rabbitmq01)。若重啟過(guò)程中卡在某個(gè)界面,需手動(dòng)強(qiáng)制重啟!
[root@rabbitmq01 ~]# ps -ef | grep rabbitmq
#重啟后,主機(jī)名自動(dòng)更新了,確認(rèn)了rabbitmq正在運(yùn)行
以下操作可以根據(jù)主機(jī)名進(jìn)行區(qū)分了!
[root@rabbitmq01 ~]# rabbitmqctl stop_app #停止rabbitmq節(jié)點(diǎn)服務(wù)
[root@rabbitmq01 ~]# rabbitmqctl reset #重置rabbitmq節(jié)點(diǎn)
[root@rabbitmq01 ~]# rabbitmqctl start_app #啟動(dòng)rabbit節(jié)點(diǎn)服務(wù)
Starting node rabbit@rabbitmq01 ... #復(fù)制返回的節(jié)點(diǎn)名稱
###########以下操作 rabbitmq02、03都需執(zhí)行###########
[root@rabbitmq02 ~]# rabbitmqctl stop_app #停止節(jié)點(diǎn)服務(wù)
[root@rabbitmq02 ~]# rabbitmqctl reset #重置節(jié)點(diǎn)
[root@rabbitmq02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
#以內(nèi)存方式加入群集,后面是復(fù)制的rabbitmq01的節(jié)點(diǎn)名
[root@rabbitmq02 ~]# rabbitmqctl start_app
[root@rabbitmq02 ~]# rabbitmq-plugins enable rabbitmq_management
#開(kāi)啟rabbitmq的web管理插件,以便可以通過(guò)瀏覽器進(jìn)行訪問(wèn)
###########rabbitmq02、03執(zhí)行完成后#################
[root@rabbitmq01 ~]# rabbitmqctl cluster_status
#查看群集狀態(tài)
Cluster status of node rabbit@rabbitmq01 ...
[{nodes,[{disc,[rabbit@rabbitmq01]},
{ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]},
{running_nodes,[rabbit@rabbitmq02,rabbit@rabbitmq03,rabbit@rabbitmq01]},
{cluster_name,<<"rabbit@rabbitmq01">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq02,[]},
{rabbit@rabbitmq03,[]},
{rabbit@rabbitmq01,[]}]}]
# rabbit01工作模式為磁盤節(jié)點(diǎn);rabbit02和03為內(nèi)存節(jié)點(diǎn)模式
# running_nodes:正在運(yùn)行的節(jié)點(diǎn)
# cluster_name:節(jié)點(diǎn)名稱
# alarms:發(fā)生問(wèn)題時(shí)rabbit01、02、03會(huì)進(jìn)行報(bào)警
#####由于剛才rabbitmq01重置,所以需要重新創(chuàng)建用戶########
[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com
[root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator
群集內(nèi)任意節(jié)點(diǎn)的IP+15672端口都可以進(jìn)行登錄訪問(wèn)!
設(shè)置匹配策略:
設(shè)置發(fā)布消息內(nèi)容:
由于我在上面部署群集時(shí),hosts文件已經(jīng)可以解析群集內(nèi)的節(jié)點(diǎn),所以這里就省略解析了!
#############在192.168.1.7服務(wù)器上操作###################
[root@localhost ~]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost ~]# chkconfig rabbitmq-server on
[root@localhost ~]# /etc/init.d/rabbitmq-server start
[root@localhost ~]# scp root@rabbitmq01:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
#將群集中的cookie信息復(fù)制到本地,之后重啟
[root@rabbitmq04 ~]# rabbitmqctl stop_app
[root@rabbitmq04 ~]# rabbitmqctl reset
[root@rabbitmq04 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
#以內(nèi)存運(yùn)行的方式加入群集,若要以磁盤的方式加入,省略“--ram”選項(xiàng)即可
[root@rabbitmq04 ~]# rabbitmqctl start_app
#開(kāi)啟web管理頁(yè)面
[root@rabbitmq04 ~]# rabbitmq-plugins enable rabbitmq_management
查看web界面:
[root@rabbitmq04 ~]# rabbitmqctl stop_app
#先在rabbitmq04上面停止節(jié)點(diǎn)
[root@rabbitmq01 ~]# rabbitmqctl -n rabbit@rabbitmq01 forget_cluster_node rabbit@rabbitmq04
#-n:指定節(jié)點(diǎn)名稱
#forget_cluster_node:后面跟要?jiǎng)h除的節(jié)點(diǎn)名稱
#回到主節(jié)點(diǎn)(rabbitmq01)上刪除節(jié)點(diǎn)
查看web界面:
——————————本文到此結(jié)束,感謝閱讀—————————————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。