溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

RabbitMQ的使用場景有哪些

發(fā)布時(shí)間:2020-05-30 12:58:21 來源:億速云 閱讀:5687 作者:鴿子 欄目:系統(tǒng)運(yùn)維

一、認(rèn)識RabbitMQ及用途
Message Queue(MQ)
相對于一些大點(diǎn)的公司都會(huì)使用這個(gè)MQ,比如像kafka,rabbitmq,activeMQ,rocketMQ主要用于系統(tǒng)與系統(tǒng)之間,或者程序與程序之間進(jìn)行數(shù)據(jù)的傳遞,那么作為消息中間件,我們可以將它作為消息代理服務(wù)器,最主要的就是作用就是系統(tǒng)之間的信息進(jìn)行”結(jié)藕“,MQ是數(shù)據(jù)可靠性的重要保障。

那么說起mq的作用之前呢,比如我們以前會(huì)遇到什么問題?
RabbitMQ的使用場景有哪些
1)比如說現(xiàn)在我們有兩個(gè)系統(tǒng),一個(gè)系統(tǒng)A,一個(gè)系統(tǒng)B,那么這兩個(gè)系統(tǒng)可以把它理解成一個(gè)訂單系統(tǒng),一個(gè)是后臺(tái)的支付系統(tǒng),那么這兩個(gè)系統(tǒng)之間,你調(diào)用我的,我調(diào)用你的,也就是數(shù)據(jù)之間進(jìn)行一個(gè)相互的傳遞。 那么按照之前的做法來說,來回的傳遞,就出現(xiàn)問題了,比如說,不管是a系統(tǒng)還是b系統(tǒng)中間任何一個(gè)系統(tǒng)出現(xiàn)了問題,我們的消息就發(fā)送不出去了,那么像碰到這種情況下,我們就需要額外的去編寫一些程序,來保證我們的消息成功送達(dá),比如說增加緩存,增加重試次數(shù),這就需要額外的編碼,這就需要編碼的工作量也是不小的。

2)另外就是數(shù)據(jù)傳遞過程中,這兩個(gè)系統(tǒng)都是java開發(fā)的還好,比如一個(gè)是java開發(fā)的一個(gè)是python開發(fā)的,那么在這兩個(gè)系統(tǒng)之間進(jìn)行數(shù)據(jù)傳遞的過程中,那么麻煩就很大了,在這里面平臺(tái)不一樣語言不一樣,進(jìn)行傳遞的接口也不一樣,這在我們無形中帶來了很大的問題。

3)對于系統(tǒng)a與系統(tǒng)b之間如果系統(tǒng)出現(xiàn)了問題,我們甚至都不知道是什么原因造成的,比如系統(tǒng)a接口變了,導(dǎo)致系統(tǒng)b接收不到哪些,系統(tǒng)b不知道出現(xiàn)哪些問題,我們沒辦法對問題進(jìn)行切全,那么在線上調(diào)試與運(yùn)維的過程中,這也是一個(gè)必然災(zāi)難性的后果。

綜上所述的話,直接調(diào)用的話稱為藕嚴(yán)重的耦合,這兩個(gè)缺了哪一個(gè)都不能正常工作,那么怎么解決呢,這個(gè)時(shí)候就需要mq去解決了。

所以mq叫做消息代理服務(wù)器,可以看到上面的mq的基本架構(gòu)圖系統(tǒng)a與系統(tǒng)b不再直接通信,中間增加了一臺(tái)MQ的消息代理服務(wù)器,所有的消息都往這個(gè)消息代理服務(wù)器上去發(fā)送,那么這個(gè)消息代理服務(wù)器本身來說它具備了一些高可用,高并發(fā)的特性,可以估且的認(rèn)為它是非常穩(wěn)定的,至少比我們開發(fā)的系統(tǒng)來說要穩(wěn)定的多的多,不用擔(dān)心當(dāng)機(jī),無法提供服務(wù),那么在這個(gè)基礎(chǔ)之上,所有的系統(tǒng)把這個(gè)消息放出去,再由這個(gè)消息服務(wù)器,根據(jù)數(shù)據(jù)的情況分別的轉(zhuǎn)發(fā)或者分發(fā)

那么我們數(shù)據(jù)傳遞的目的,那么這么做有這么一個(gè)好處
首先我們系統(tǒng)之間不再進(jìn)行之間的通信,那么它就完成這個(gè)節(jié)藕的工作,它完全面向一個(gè)中間人來做
其二的話MQ它是一個(gè)國際的標(biāo)準(zhǔn),它在底層遵循一個(gè)叫做amqp高級消息隊(duì)列協(xié)議,那么在這個(gè)底層的話因?yàn)樗且粋€(gè)國際標(biāo)準(zhǔn),因此系統(tǒng)a與系統(tǒng)b,我們不管是什么樣的系統(tǒng)開發(fā)的,只要遵循了數(shù)據(jù)傳輸?shù)囊?guī)范,那么就可以在這里面完成通過mq進(jìn)行數(shù)據(jù)的傳遞,這是數(shù)據(jù)統(tǒng)一的協(xié)議,另外就是數(shù)據(jù)切全的過程,那么在切全的過程中,你會(huì)發(fā)現(xiàn),我們估且認(rèn)為mq這是一個(gè)穩(wěn)定的服務(wù)。系統(tǒng)a與系統(tǒng)b進(jìn)行數(shù)據(jù)傳輸,如果系統(tǒng)a把數(shù)據(jù),送到mq里面,那么系統(tǒng)a的任務(wù)就完成了,至于系統(tǒng)b把我們的數(shù)據(jù)拿走,那是系統(tǒng)b的事,那么系統(tǒng)a的事完成了,那么如果真的出現(xiàn)了問題,比如運(yùn)維工程師發(fā)現(xiàn)這個(gè)程序沒有執(zhí)行,那么看著系統(tǒng)a發(fā)送成功了,那么剩下的問題就是連帶mq,到系統(tǒng)b這一塊進(jìn)行一個(gè)處理與跟蹤,那么mq并提供強(qiáng)大的圖形化管理頁面,我們可以輕易的將之前發(fā)送的數(shù)據(jù)進(jìn)行跟蹤與管理。這也是非常的重要

那么說到mq,它有這么一個(gè)好的特性,可以總結(jié)一句話,mq解決了在這個(gè)系統(tǒng)之間進(jìn)行數(shù)據(jù)傳遞的耦合性問題,使用mq幾乎適用于我們所有的系統(tǒng)調(diào)用或者是分布式項(xiàng)目

二、什么是RabbitMQ?
在我們市場上有各種各樣的mq,但是rabbitmq是全世界最火的開源消息代理服務(wù)器,在全世界擁有超過35000個(gè)項(xiàng)目部署在rabbitmq,用的人多,而且解決一些相關(guān)的問題也就很快,這個(gè)rabbit英文翻譯為兔子,這個(gè)也是一個(gè)整個(gè)消息中間件的龍頭老大,也就是我們使用rabbitmq很多的方案不用自己去考慮,因?yàn)槿澜绲墓こ處煻紴檫@個(gè)rabbitmq添磚加瓦,那么這個(gè)rabbitmq的最新版本的是3.8.2
而且rabbitmq支持幾乎所有的操作系統(tǒng)與編程語言,提供了高并發(fā),高可用的成熟方案,支持多種消息協(xié)議,易于部署與使用
官方地址:https://www.rabbitmq.com/

RabbitMQ的使用場景有哪些
Rabbitmq與其他MQ的對比
像activemq和kafka都是apache的子成員,而rocketmq是阿里巴巴推行的消息中間件,也是作為一個(gè)apache的子項(xiàng)目
從這張表看出這個(gè)rabbitmq是用的最多的這個(gè)毋庸置疑,一般使用中遇到的問題,在它們的論壇以及百度中都可以找到相關(guān)的解決方案,另外就是kafka由于大數(shù)據(jù)的應(yīng)用也比較多,應(yīng)用比較多,逐漸的也已經(jīng)替代了activemq,像rocketmq一般應(yīng)用的都在國內(nèi)一般比較多,另外都支持這些數(shù)據(jù)保存到磁盤上,并發(fā)吞吐量就是每秒可以處理多少數(shù)據(jù),在不同的設(shè)計(jì)與不同的背景當(dāng)中,它的結(jié)果也是完全不同的,這里最高的是kafka,因?yàn)槭谴髷?shù)據(jù)的領(lǐng)域,也是因?yàn)楦咝阅芤鹆撕芏啻髷?shù)據(jù)工程師的注意,并發(fā)量在rocketmq中也是極高的,因?yàn)橄耠p十一這么大的并發(fā)量rocket扛住了,它在底層的優(yōu)化也是做的很好的,在并發(fā)吞吐量rabbitmq就稍微遜色一些,rabbitmq在數(shù)據(jù)可靠性的問題上做了很大的努力,它保證在這里數(shù)據(jù)是非??煽康?,也是極高的,另外就是生態(tài)完整度,在周邊做了一些相關(guān)的,比如UI或者路由分發(fā)等,用戶總量也是rabbitmq最多,其次就是kafka,應(yīng)用場景,由于極高的數(shù)據(jù)可靠性,rabbitmq主要用于高可靠的交易系統(tǒng)當(dāng)中,activemq用于一些比較傳統(tǒng)的消息傳遞當(dāng)中,kafka一般使用最多也是使用日志處理大數(shù)據(jù)應(yīng)用這一塊,而rocketmq一般主要用于阿里巴巴內(nèi)部比較多一點(diǎn),像雙十一就是使用的rocketmq,主要適用于互聯(lián)網(wǎng)高并發(fā),高可用這一塊,但是這一塊,在阿里也開源了很多的比如dubbo,當(dāng)時(shí)也停止更新了,然后恢復(fù)的,像這一塊我們社區(qū)的完整性和開源是極其不利的,像阿里有款分布式數(shù)據(jù)庫叫OceanBase,由淘寶核心系統(tǒng)研發(fā)部、運(yùn)維、DBA、廣告、應(yīng)用研發(fā)等部門共同完成。也是對mysql數(shù)據(jù)庫底層進(jìn)行了二次開發(fā),但是用著用著就閉源了,所以擔(dān)心阿里會(huì)閉源rabbitmq,在國內(nèi)的開源軟件來說,現(xiàn)在能做的很好的不是特別多,對于rocketmq未來是閉源商用還是繼續(xù)開源,那么現(xiàn)在還是屬于一個(gè)觀望的態(tài)度,現(xiàn)在目前看到rocketmq在apache的star是5000多星,只能說是中規(guī)中矩。
RabbitMQ的使用場景有哪些
更多相關(guān)內(nèi)容:

關(guān)于RabbitMQ應(yīng)用場景與實(shí)例的詳解

RabbitMQ常用面試題有哪些

RabbitMQ的應(yīng)用場景
異構(gòu)系統(tǒng)的數(shù)據(jù)傳遞:什么叫異構(gòu)系統(tǒng),就是現(xiàn)在有兩個(gè)系統(tǒng)彼此要傳遞數(shù)據(jù),一個(gè)用java一個(gè)用c開發(fā)的,一¥個(gè)在天津一個(gè)在北京,像這種不在一個(gè)地區(qū)又是不同語言開發(fā)的系統(tǒng)叫做異構(gòu)系統(tǒng),像這種異構(gòu)系統(tǒng)利用mq進(jìn)行數(shù)據(jù)的傳遞是不錯(cuò)的選擇,但是遇到海量的數(shù)據(jù),但是不建議使用mq進(jìn)行去傳遞,一般mq擅長傳遞小規(guī)模的數(shù)據(jù)。

高并發(fā)程序的流量控制:比如像阿里的雙十一進(jìn)行秒殺的時(shí)候或者進(jìn)行系統(tǒng)最忙碌的時(shí)候,進(jìn)行流量控制的時(shí)候,削峰,平谷,像這種應(yīng)用用mq做肯定沒問題,mq是采用對列的機(jī)制,那么只允許同一時(shí)間有多少人進(jìn)去,那么在這里是使用mq進(jìn)行控制的。

基于p2p,p2ppp的程序:mq本身支持定閱和發(fā)布的模式或者是進(jìn)行點(diǎn)對點(diǎn)消費(fèi)的模式,比如使用mq進(jìn)行點(diǎn)對點(diǎn)的開發(fā),比如像自己寫的qq,像微信,點(diǎn)對點(diǎn)通信,我們可以使用mq進(jìn)行分發(fā),另外就是p2ppp的程序的話,也非常適合就像我們程序底層的時(shí)候,大家看過愛奇藝什么的,那么比如喜歡一個(gè)人的頻道,直接點(diǎn)一下關(guān)注,那么到這個(gè)人節(jié)目有更新的時(shí)候,馬上訂閱的人都能收到它的最新的消息,這就是通過mq的訂閱與發(fā)布,這些都是mq的天生所在。

分布式系統(tǒng)的事務(wù)一致性TCC:分布式事務(wù)是我們開發(fā)過程中最撓頭的問題,比如說什么是分布式事務(wù),現(xiàn)在有5個(gè)系統(tǒng),這5個(gè)系統(tǒng)的話要完成大的業(yè)務(wù),那么這個(gè)大的業(yè)務(wù),這5個(gè)系統(tǒng)每一個(gè)系統(tǒng)都完成了一小塊數(shù)據(jù),現(xiàn)在有需求來了,這5個(gè)系統(tǒng)要么全部都處理成功,要么中間有任何一個(gè)出現(xiàn)問題,我要把之前的系統(tǒng)信息全部都回滾什么都沒做過,那么這就是我們的說到的分布式事務(wù),那么分布式事務(wù)底層的話我們的設(shè)計(jì)叫tcc,那么在這里面最核心的就是基于mq進(jìn)行消息的分發(fā),來通知我們的應(yīng)用,它進(jìn)行提交回滾。

高可靠的交易系統(tǒng):在高可靠的交易系統(tǒng)中,rabbitmq最值得驕傲的是高可靠性,對于應(yīng)用來說mq本身就是高可靠性,同時(shí)對數(shù)據(jù)也進(jìn)行了高可靠的支持,幾乎不會(huì)出現(xiàn)數(shù)據(jù)mq的層面上丟失的情況,那么在這種高可靠的交易系統(tǒng)來說,rabbitmq最適合不過了,任何一個(gè)多數(shù)據(jù)進(jìn)行交互的兩個(gè)以上三個(gè)以上項(xiàng)目,進(jìn)行數(shù)據(jù)傳遞用mq作為系統(tǒng)節(jié)藕的服務(wù)器是再合適不過的。

三、Linux平臺(tái)安裝最新RabbitMQ
RabbitMQ使用Erlang開發(fā)
Erlang(['?:l??])是一種通用的面向并發(fā)的編程語言, Erlang是一個(gè)結(jié)構(gòu)化,動(dòng)態(tài)類型編程語言,內(nèi)建并行計(jì)算支持。
使用Erlang來編寫分布式應(yīng)用要簡單的多,Erlang運(yùn)行時(shí)環(huán)境是一個(gè)虛擬機(jī),有點(diǎn)像Java虛擬機(jī),這樣代碼一經(jīng)編譯,同樣可以隨處運(yùn)行。
下載地址:https://www.rabbitmq.com/download.html
直接下載最新的rabbitmq到本地
RabbitMQ的使用場景有哪些

rabbitmq還需要依賴erlang的運(yùn)行環(huán)境
https://www.erlang-solutions.com/resources/download.html
選擇centos,找到22.2.5最新的版本下載到本地
RabbitMQ的使用場景有哪些
[root@zhaocheng ~]# mkdir rabbitmq
[root@zhaocheng rabbitmq]# ls
esl-erlang_22.2.5-2~centos~7_amd64.rpm  rabbitmq-server-3.8.2-1.el7.noarch.rpm
--nodeps不檢查依賴,去除依賴關(guān)系
[root@zhaocheng rabbitmq]# rpm -ivh --nodeps esl-erlang_22.2.5-2~centos~7_amd64.rpm
[root@zhaocheng rabbitmq]# rpm -ivh --nodeps rabbitmq-server-3.8.2-1.el7.noarch.rpm
[root@zhaocheng rabbitmq]# rabbitmq-plugins enable rabbitmq_management
啟動(dòng)控制臺(tái)
[root@zhaocheng rabbitmq]# rabbitmq-server
訪問http://ip:15672
RabbitMQ的使用場景有哪些

登錄的時(shí)候3.3以上的版本都會(huì)出現(xiàn)User can only log in via localhost,是因?yàn)榻故褂胓uest/guest權(quán)限通過除localhost外的訪問
找到這個(gè)文件rabbit.app
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/ebin/rabbit.app

將:{loopback_users, [<<”guest”>>]},
改為:{loopback_users, []},

重啟服務(wù)
[root@zhaocheng ~]# rabbitmqctl stop
[root@zhaocheng ~]# rabbitmq-server
登錄:guest
密碼:guest
RabbitMQ的使用場景有哪些
RabbitMQ常用命令
啟動(dòng)與關(guān)閉
rabbitmq-server 前臺(tái)啟動(dòng)
rabbitmq-server -detached 后臺(tái)啟動(dòng)
rabbitmqctl stop  停止服務(wù)/kill -9 rbbitmq的pid

終止與啟動(dòng)應(yīng)用
rabbitmqctl start_app 啟動(dòng)應(yīng)用
rabbitmqctl stop_app 終止應(yīng)用
就是將我們的應(yīng)用進(jìn)行啟動(dòng)或者終止,這個(gè)不會(huì)對我們的進(jìn)程產(chǎn)生影響,只是對我們的隊(duì)列服務(wù)進(jìn)行了暫停,比如像一個(gè)電廠將這個(gè)電廠看作一個(gè)進(jìn)程,比如電廠進(jìn)行升級改造,需要拉閘,那么相當(dāng)于使用這個(gè)rabbitmqctl stop_app,恢復(fù)的話,使用start_app

用戶管理
創(chuàng)建一個(gè)用戶,比如叫kubernetes
格式:rabbitmqctl add_user {username} {password}
[root@zhaocheng ~]# rabbitmqctl add_user kubernetes 123456
Adding user "kubernetes" ...
RabbitMQ的使用場景有哪些
刪除用戶
rabbitmqctl delete_user {username}

重置密碼,一般的話在部署rabbitmq的時(shí)候進(jìn)行對guest用戶進(jìn)行修改密碼,因?yàn)檫@個(gè)權(quán)限是非常大的
[root@zhaocheng ~]# rabbitmqctl change_password guest 123456789
Changing password for user "guest" ...
格式:rabbitmqctl change_password {username} {newpassword}

授予用戶角色(Tag),在rabbitmq中有四種基本的角色,對mq有不同的操作權(quán)限,這4種角色統(tǒng)一叫tag,可以針對我們創(chuàng)建的用戶給它一定的權(quán)限,這個(gè)tag也就是包含了一定相關(guān)的策略信息。
格式:rabbitmqctl set_user_tags {username} {tag}
[root@zhaocheng ~]# rabbitmqctl set_user_tags kubernetes administrator
Setting tags for user "kubernetes" to [administrator] ...
查看對我們的kubernetes用戶設(shè)置了權(quán)限為超級管理員
RabbitMQ的使用場景有哪些
設(shè)置用戶允許訪問的vhost:訪問的虛擬主機(jī),相當(dāng)于對應(yīng)mysql中對應(yīng)的數(shù)據(jù)庫,mysql可以把數(shù)據(jù)放在不同對應(yīng)的數(shù)據(jù)中,對數(shù)據(jù)進(jìn)行分類,那么vhost也是一樣,可以對不同的系統(tǒng)進(jìn)行設(shè)置不同的虛擬主機(jī),通過set_permissions規(guī)定哪個(gè)用戶,可以訪問哪些虛擬主機(jī),后面的星是能夠執(zhí)行所有的權(quán)限,第一個(gè)是配置權(quán)限,讀權(quán)限,寫權(quán)限,-p是虛擬主機(jī)的路徑
格式:rabbitmqctl set_permissions -p / user_admin '.' '.' '.'
給kubernetes用戶一個(gè)默認(rèn)的虛擬主機(jī)的操作權(quán)限,一般生產(chǎn)環(huán)境中會(huì)創(chuàng)建多個(gè)虛擬主機(jī),進(jìn)行一些相關(guān)的權(quán)限
[root@zhaocheng ~]# rabbitmqctl set_permissions -p / kubernetes '.
' '.' '.'
Setting permissions for user "kubernetes" in vhost "/" ...
可以使用頁面上直接添加用戶

RabbitMQ的使用場景有哪些
rabbitmq用戶四種tag
超級管理員(administrator):也就是進(jìn)行對所有的用戶進(jìn)行管理
可登陸管理控制臺(tái)(啟用management plugin的情況下),可查看所有 的信息,并且可以對用戶,策略(policy)進(jìn)行操作。

監(jiān)控者(monitoring):可以查看rabbitmq節(jié)點(diǎn)的相關(guān)信息,是管理我們運(yùn)行節(jié)點(diǎn)的運(yùn)行狀態(tài)的
登陸管理控制臺(tái)(啟用management plugin的情況下),同時(shí)可以查看
rabbitmq節(jié)點(diǎn)的相關(guān)信息(進(jìn)程數(shù),內(nèi)存使用情況,磁盤使用情況等)

策略制定者(policymaker):這個(gè)就無法查看我們節(jié)點(diǎn)的相關(guān)信息,但是可以進(jìn)行一些策略的定制,比如在管理集群的時(shí)候,哪些隊(duì)列可以進(jìn)行復(fù)制,或者運(yùn)行的規(guī)則,規(guī)定了我們的節(jié)點(diǎn)是怎么運(yùn)行的
可登陸管理控制臺(tái)(啟用management plugin的情況下), 同時(shí)可以對
policy進(jìn)行管理。但無法查看節(jié)點(diǎn)的相關(guān)信息(上圖紅框標(biāo)識的部分)。

普通管理者(management)
僅可登陸管理控制臺(tái)(啟用management plugin的情況下),無法看到 節(jié)點(diǎn)信息,也無法對策略進(jìn)行管理。

還有一個(gè)就是什么都沒寫的時(shí)候,沒有角色,連控制臺(tái)都無法登錄

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI