目錄:
1.rabbitmq好處:
2.應(yīng)用場景:
3.交換機類型:
4.消息基于什么進行傳輸:
5.如何確保消息正確的發(fā)送:
6.如何確保接收方消費了消息:
7.如何避免消息重復(fù)投遞和重復(fù)消費:
8.如何確保數(shù)據(jù)不被丟失:
1.rabbitmq好處:
1.流量削峰:避免大流量時,所有請求都同時操作數(shù)據(jù)庫。數(shù)據(jù)庫io是十分消耗資源的。
2.應(yīng)用解耦:應(yīng)用a需要對應(yīng)用b進行操作,例如訂單的下單后的減庫存操作。庫存應(yīng)用宕機后,避免因為庫存應(yīng)用的宕機,而導(dǎo)致操作報錯。
3.異步處理:避免串行操作,例如某個操作需要發(fā)送系統(tǒng)消息和發(fā)送短信的操作不應(yīng)該串行,而是同時進行,加快響應(yīng)。
2.應(yīng)用場景:
1.簡單隊列:
一個生產(chǎn)者------消息隊列-----一個消費者
2.工作隊列:
一個生產(chǎn)者-----消息隊列------多個消費者
輪詢:按照消息的先后依次分發(fā)給消費者
公平分發(fā):不會平均分發(fā),而是誰有空就誰消費
3.發(fā)布者訂閱模式:
一個生產(chǎn)者---交換機----多個隊列----隊列對應(yīng)的消費者
交換機沒有存儲數(shù)據(jù)的能力,隊列才有,所以交換機需要綁定隊列,交換機接收到生產(chǎn)者的數(shù)據(jù),推送給隊列。
4.topic主題模式:
主要交換機有路由鍵的存在,將路由鍵和隊列進行綁定,發(fā)送消息時,指定路由鍵的內(nèi)容,發(fā)送給綁定的隊列即可。
3.交換機類型:
1.fanout:當(dāng)有消息時,把消息發(fā)送給所有隊列。
2.topic:有路由鍵,將路由鍵和隊列進行綁定。
3.direct和header:這兩個不常用。
4.消息基于什么進行傳輸:
由于tcp創(chuàng)建和銷毀開銷大,所以消息一般基于信道傳輸。
信道是基于tcp連接的虛擬連接,一個tcp連接可以包含很多個信道。
5.如何確保消息正確的發(fā)送:
rabbitmq采用發(fā)送方確認(rèn)的模式,確保消息正確的發(fā)送到rabbitmq。
發(fā)送方確認(rèn)模式:一旦消息到達隊列后,會給發(fā)送方一個確認(rèn)的信息。而rabbitmq內(nèi)部錯誤沒有接收到時,會給發(fā)送發(fā)一個未確認(rèn)的信息。
6.如何確保接收方消費了消息:
rabbitmq采用接收方確認(rèn)模式。
每一條消息都會被接收方確認(rèn),一旦確認(rèn)消費了消息,rabbitmq才會將消息從隊列中刪除。
7.如何避免消息重復(fù)投遞和重復(fù)消費:
生產(chǎn)者每發(fā)送一條消息都會生產(chǎn)一個內(nèi)部消息id,防止重復(fù)投遞。
當(dāng)消費者消費時,每條消費的信息都有一個全局id,防止被重復(fù)消費。
8.如何確保數(shù)據(jù)不被丟失:
生產(chǎn)者不丟失數(shù)據(jù):
rabbitmq采用transaction和confirm來確保消息不被丟失。
消息隊列不丟失數(shù)據(jù):
一般采用持久化磁盤的操作。
消費者不丟失數(shù)據(jù):
采用消費確認(rèn)模式。
9.消息隊列的缺點:
1.系統(tǒng)復(fù)雜性增加。