摘要:交換器和隊列是綁定的,用于消息隊列和交換器之間的關聯(lián)。會將消息發(fā)送到匹配的隊列中去使用號和號。參考資料消息隊列之什么是消息隊列淺談消息隊列及常見的消息中間件
一、定義
比較官方的說法是是指利用 高效可靠 的 消息傳遞機制 進行與平臺無關的 數(shù)據(jù)交流,并基于 數(shù)據(jù)通信 來進行分布式系統(tǒng)的集成。
我們可以理解為將要傳輸?shù)臄?shù)據(jù)放在一個隊列中。
1、解耦
(1)發(fā)送者和接收者不必了解對方,只需要確認消息即可
比如在交易系統(tǒng)中,支付系統(tǒng)把支付結(jié)果放到消息中間件中,然后通知訂單系統(tǒng)修改支付狀態(tài),這一過程中支付系統(tǒng)和訂單系統(tǒng)是互不關心的,但是可以保證數(shù)據(jù)的最終一致。
2、異步處理
![圖片上傳中...]
從圖中我們可以看見,A系統(tǒng)將消息發(fā)送到消息隊列后可以立即返回,然后去處理其他事情,而不用管BCD,讓他們自己去拿,這也就實現(xiàn)了異步處理。
3、流量削峰
這一點也很好理解,比如現(xiàn)在是用戶使用的高峰期,一秒鐘有3000條請求,但是只有兩臺服務器,每臺服務器最多只能處理1000條,那就會造成系統(tǒng)的崩潰,如果說再增加一個服務器,還不夠怎么沒辦,而且這樣會花費不少成本,因此如果用一個消息隊列,把所有請求都先放到里面,再讓服務器自己去拿,就不會造成擁堵了,這就是所謂“削峰”。
![圖片上傳中...]
4、廣播
使用消息隊列也可以很好的實現(xiàn)廣播,如果想要發(fā)送消息給好幾個用戶,那么如果每個都要發(fā)一遍非常浪費效率,但是將消息放在消息隊列中,讓用戶自己去取,就非常的高效。
1、保證高可用性
在使用消息隊列的時候需要注意高可用性,最好使用分布式或者集群的消息隊列,以為只把消息隊列放在一臺服務器上,那如果服務器出了問題,整個系統(tǒng)都崩了。
2、防止數(shù)據(jù)丟失
其實使用消息隊列,最需要注意的就是保證數(shù)據(jù)不丟失,所以可能需要將數(shù)據(jù)進行備份等。
![圖片上傳中...]
五、常用消息隊列技術——rabbitmqrabbitmq與基本的消息隊列模型不完全一樣,而是在它的基礎上增加了一個“exchange”。
![圖片上傳中...]
(1)在圖中我們可以看到,exchange(交換器)接受生產(chǎn)者的消息并將消息路由給隊列。
(2)交換器和隊列是Binding 綁定的,用于消息隊列和交換器之間的關聯(lián)。一個綁定就是基于路由鍵將交換器和消息隊列連接起來的路由規(guī)則,所以可以將交換器理解成一個由綁定構成的路由表。
(3)在每個消息的消息頭中都包含了路由鍵,交換器就根據(jù)路由鍵轉(zhuǎn)發(fā)消息到隊列中。
(4)exchange一般有以下4種類型:
① direct:如果路由鍵和綁定鍵完全一致,就轉(zhuǎn)發(fā)到相應的隊列。
② fanout:會將消息轉(zhuǎn)發(fā)到所有的隊列中去。
③ topic:會將消息發(fā)送到匹配的隊列中去(使用#號和*號)。
④ header:header不會匹配路由鍵,而是匹配請求頭,這種類型已經(jīng)很少使用了。
參考資料:https://juejin.im/post/5a67f7... 消息隊列之RabbitMQ
https://juejin.im/post/5cb025... 什么是消息隊列
https://juejin.im/post/5b41fe... 淺談消息隊列及常見的消息中間件
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75034.html
摘要:性能調(diào)優(yōu)筆記避免雷區(qū)要避免流控機制觸發(fā)服務端默認配置是當內(nèi)存使用達到,磁盤空閑空間小于,即啟動內(nèi)存報警,磁盤報警報警后服務端觸發(fā)流控機制。最佳線程生產(chǎn)者使用多線程發(fā)送數(shù)據(jù)到三到五個線程性能發(fā)送最佳,超過它也不能提高生產(chǎn)的發(fā)送速率。 RabbitMq 性能調(diào)優(yōu)筆記 [TOC] 避免雷區(qū) 要避免流控機制觸發(fā) 服務端默認配置是當內(nèi)存使用達到40%,磁盤空閑空間小于50M,即啟動內(nèi)存報警,磁...
摘要:套接字是全雙工的。做兩件事將未鏈接的套接字轉(zhuǎn)換為被動套接字,指示內(nèi)核接受對此套接字的連接請求制定了內(nèi)核為此套接口排隊的最大連接個數(shù)對于指定的套接字,內(nèi)核要維護未連接隊列和已連接隊列兩個隊列,完成三路握手的連接將從未連接隊列移至已連接隊列。 基礎 一個套接字由相關五元組構成,協(xié)議、本地地址、本地端口、遠程地址、遠程端口。套接字是全雙工的。 listen函數(shù) 只用于tcp,listen的原...
摘要:消息持久化控制的屬性就是消息的持久化。當生產(chǎn)者發(fā)送的消息路由鍵為時,兩個消費者都會收到消息并處理當生產(chǎn)者發(fā)送的消息路由鍵為時,只有消費者可以接收到消息。八的消息確認機制在中,可以通過持久化數(shù)據(jù)解決服務器異常的數(shù)據(jù)丟失問題。 一、內(nèi)容大綱&使用場景 1. 消息隊列解決了什么問題? 異步處理 應用解耦 流量削鋒 日志處理 ...... 2. rabbitMQ安裝與配置 3. Java操...
閱讀 858·2021-11-25 09:43
閱讀 3690·2021-11-19 09:40
閱讀 894·2021-09-29 09:34
閱讀 1808·2021-09-26 10:21
閱讀 885·2021-09-22 15:24
閱讀 4205·2021-09-22 15:08
閱讀 3281·2021-09-07 09:58
閱讀 2699·2019-08-30 15:55