1、簡(jiǎn)介
RabbitMQ 是由Erlang開發(fā)的 AMQP(Advanved Message Queue)的開源實(shí)現(xiàn)纠修;消息投送時(shí)使用?“至少一次交付”模式撵溃,來保證消息的投送成功率绣否。
AMQP:是一種進(jìn)程間傳遞異步消息的網(wǎng)絡(luò)協(xié)議
幾個(gè)概念說明:
Broker:它提供一種傳輸服務(wù),它的角色就是維護(hù)一條從生產(chǎn)者到消費(fèi)者的路線泞当,保證數(shù)據(jù)能按照指定的方式進(jìn)行傳輸,
Exchange:消息交換機(jī),它指定消息按什么規(guī)則,路由到哪個(gè)隊(duì)列。
Queue:消息的載體,每個(gè)消息都會(huì)被投到一個(gè)或多個(gè)隊(duì)列奇颠。
Binding:綁定败去,它的作用就是把exchange和queue按照路由規(guī)則綁定起來.
Routing Key:路由關(guān)鍵字,exchange根據(jù)這個(gè)關(guān)鍵字進(jìn)行消息投遞。
vhost:虛擬主機(jī),一個(gè)broker里可以有多個(gè)vhost烈拒,用作不同用戶的權(quán)限分離为迈。
Producer:消息生產(chǎn)者,就是投遞消息的程序.
Consumer:消息消費(fèi)者,就是接受消息的程序.
Channel:消息通道,在客戶端的每個(gè)連接里,可建立多個(gè)channel.
2三椿、RabbitMq工作模式
2.1 simple 模式
消息生產(chǎn)者將消息放入隊(duì)列
消息消費(fèi)者監(jiān)聽,消息隊(duì)列中有消息就消費(fèi)葫辐,自動(dòng)從隊(duì)列中刪除(隱患:消息可能沒有被消費(fèi)者正確處理,已經(jīng)從隊(duì)列中消失了,造成消息的丟失,這里可以設(shè)置成手動(dòng)的ack,但如果設(shè)置成手動(dòng)ack伴郁,處理完后要及時(shí)發(fā)送ack消息給隊(duì)列耿战,否則會(huì)造成內(nèi)存溢出)
2.2?work工作模式(資源的競(jìng)爭(zhēng))
消息生產(chǎn)者將消息放入隊(duì)列
但是會(huì)有多個(gè)消費(fèi)者,同時(shí)監(jiān)聽同一個(gè)隊(duì)列焊傅,來消費(fèi)消息剂陡。C1,C2同時(shí)搶隊(duì)列的消息內(nèi)容狐胎,誰先搶到誰負(fù)責(zé)處理(隱患:高并發(fā)情況下鸭栖,默認(rèn)會(huì)出現(xiàn)一個(gè)消息被多個(gè)消費(fèi)者共同使用情況,可以設(shè)置一個(gè)開關(guān)(syncronize) 保證一條消息只能被一個(gè)消費(fèi)者使用)
2.3?publish/subscribe發(fā)布訂閱(共享資源)
每個(gè)消費(fèi)者監(jiān)聽自己的隊(duì)列
x是broker內(nèi)的交換機(jī)握巢,消息生產(chǎn)者將消息發(fā)送給交換機(jī)晕鹊,由交換機(jī)來轉(zhuǎn)發(fā)消息到綁定的隊(duì)列
2.4?routing路由模式
消息生產(chǎn)者將消息發(fā)送給交換機(jī),交換機(jī)根據(jù)路由匹配對(duì)應(yīng)的消息隊(duì)列暴浦,然后對(duì)應(yīng)的消費(fèi)者才能消費(fèi)消息溅话;
2.5?topic 主題模式(路由模式的一種)
* # 都是通配符,* 是匹配單個(gè)字符歌焦,#匹配字符
2.6 rpc模式
RPC就是遠(yuǎn)程調(diào)用方式飞几,Rabbitmq來實(shí)現(xiàn)的異步調(diào)用,流程如下:
1独撇、客戶端(消費(fèi)生產(chǎn)者)向 RPC隊(duì)列發(fā)送rpc調(diào)用消息屑墨,同時(shí)監(jiān)聽rpc響應(yīng)隊(duì)列
2、服務(wù)端監(jiān)聽RPC請(qǐng)求隊(duì)列纷铣,收到消息后執(zhí)行自身邏輯卵史,得到方法結(jié)果并發(fā)送到響應(yīng)隊(duì)列中
3、客戶端(消費(fèi)生產(chǎn)者)監(jiān)聽響應(yīng)隊(duì)列关炼,接收rpc調(diào)用結(jié)果
隊(duì)列交互 根據(jù)?replyTo(為請(qǐng)求創(chuàng)建匿名互斥隊(duì)列) 和?correlationId (請(qǐng)求的唯一值程腹,客戶端收到響應(yīng)結(jié)果時(shí) 校驗(yàn)使用)來實(shí)現(xiàn)
3、Exchange 類型
3.1 Direct
直連模式儒拂,要求消息與指定的路由鍵完全匹配
3.2 Topic
模糊匹配寸潦,路由鍵模糊匹配某種規(guī)則 ;符號(hào)“#”匹配一個(gè)或多個(gè)詞社痛,符號(hào)“*”只能匹配一個(gè)詞见转。
3.3?Fanout
不處理路由鍵,隊(duì)列與交換機(jī)綁定即可蒜哀。廣播式發(fā)送消息
3.4?Headers
不處理路由鍵斩箫,發(fā)送消息中 headers屬性進(jìn)行匹配;隊(duì)列與交換機(jī)綁定是指定一組鍵值對(duì),消息的headers與鍵值對(duì)匹配乘客,完全匹配則路由到該隊(duì)列狐血,否則不處理
4、相關(guān)作用和使用場(chǎng)景
解耦:服務(wù)間調(diào)用 由直接調(diào)用改為mq中發(fā)起調(diào)用易核,如發(fā)短信匈织,或者 還款信息更改
異步:一個(gè)業(yè)務(wù)場(chǎng)景完成后,可以同時(shí)觸發(fā)其他場(chǎng)景并行執(zhí)行牡直;用戶下單時(shí)缀匕,發(fā)起三方數(shù)據(jù)檢查或發(fā)起審核
削峰:請(qǐng)求量增大時(shí),來平緩處理消息碰逸;如果 埋點(diǎn)處理或者 搶購活動(dòng)處理 乡小,或者延遲隊(duì)列處理
5、其他
怎么保證消息不丟失
ack確認(rèn)饵史,開啟持久化
重復(fù)消費(fèi)問題
參考: