一.使用rabbitmq有什麼好處?
1.解耦,系統a在**中直接呼叫系統b和系統c的**,如果將來d系統接入,系統a還需要修改**,過於麻煩!
2.非同步,將訊息寫入訊息佇列,非必要的業務邏輯以非同步的方式執行,加快響應速度
3.削峰,併發量大的時候,所有的請求直接懟到資料庫,造成資料庫連線異常
二、rabbitmq的四種模式
1.簡單佇列功能:乙個生產者p傳送訊息到佇列q,乙個消費者c接收生產者:配置好rabbitmq連線工廠,從連線工廠中獲取連線connection,使用連線建立通道channel,使用通道channel建立佇列queue,使用通道channel向佇列中傳送訊息,關閉通道和連線。消費者:配置好rabbitmq連線工廠,從連線工廠中獲取連線connection,使用連線建立通道channel,使用通道channel建立佇列queue, 建立消費者並監聽佇列,從佇列中讀取訊息。
2.工作佇列功能:乙個生產者,多個消費者,每個消費者獲取到的訊息唯一,多個消費者只有乙個佇列
任務佇列:避免立即做乙個資源密集型任務,必須等待它完成,而是把這個任務安排到稍後再做。我們將任務封裝為訊息並將其傳送給佇列。後台執行的工作程序將彈出任務並最終執行作業。當有多個worker同時執行時,任務將在它們之間共享。
生產者:從連線工廠中獲取連線connection,使用連線建立通道channel,使用通道channel建立佇列queue,使用通道channel向佇列中傳送訊息,2條訊息之間間隔一定時間,關閉通道和連線。
3.消費者:從連線工廠中獲取連線connection,使用連線建立通道channel,使用通道channel建立佇列queue, 建立消費者並監聽佇列,從佇列中讀取訊息,當兩個消費者同時監聽乙個佇列時,他們並不能同時消費一條訊息,而是隨機消費訊息。訊息佇列中有1,2,3,4,5,6訊息,consumer1消費了1,3,5;consumer2消費了2,4,6。這個資料是隨機的。
4.發布/訂閱模式功能:生產者只能把訊息傳送給乙個exchange,exchange只做一件簡單的事情:一方面它們接收從生產者傳送過來的訊息,另一方面,它們把接收到的訊息推送給佇列。乙個exchage必須清楚地知道如何處理一條訊息。eexchange:有四種型別的交換器,分別是:direct、topic、headers、fanout。
使用:這裡講解一下廣播fanout交換器,廣播模式交換器很簡單,從字面意思也能理解,它其實就是把接收到的訊息推送給所有它知道的佇列。訊息佇列繫結到交換器上,那麼生產者產生的訊息,通過交換器後,給**給每個繫結了交換機的佇列,供消費者消費訊息。
5.路由模式功能:路由模式是在使用交換機的同時,生產者指定路由傳送資料,消費者繫結路由接受資料。與發布/訂閱模式不同的是,發布/訂閱模式只要是繫結了交換機的佇列都會收到生產者向交換機推送過來的資料。而路由模式下加了乙個路由設定,生產者向交換機傳送資料時,會宣告傳送給交換機下的那個路由,並且只有當消費者的佇列繫結了交換機並且宣告了路由,才會收到資料。
三、訊息基於什麼傳輸?
由於tcp連線的建立和銷毀開銷較大,且併發數受系統資源限制,會造成效能瓶頸。rabbitmq使用通道的方式來傳輸資料。通道是建立在真實的tcp連線內的虛擬連線,且每條tcp連線上的通道數量沒有限制。
四、訊息如何分發?
優點:(1)解耦
傳統模式的缺點:系統間耦合性太強,例如系統a在**中直接呼叫系統b和系統c的**,如果將來d系統接入,系統a還需要修改**,過於麻煩!中介軟體模式的的優點:將訊息寫入訊息佇列,需要訊息的系統自己從訊息佇列中訂閱,從而系統a不需要做任何修改。
(2)非同步
傳統模式的缺點:一些非必要的業務邏輯以同步的方式執行,太耗費時間。中介軟體模式的的優點:將訊息寫入訊息佇列,非必要的業務邏輯以非同步的方式執行,加快響應速度
(3)削峰
傳統模式的缺點:併發量大的時候,所有的請求直接懟到資料庫,造成資料庫連線異常中介軟體模式的的優點:系統a慢慢的按照資料庫能處理的併發量,從訊息佇列中慢慢拉取訊息。在生產中,這個短暫的高峰期積壓是允許的。
缺點:系統可用性降低:你想啊,本來其他系統只要執行好好的,那你的系統就是正常的。現在你非要加個訊息佇列進去,那訊息佇列掛了,你的系統不是呵呵了。因此,系統可用性降低系統複雜性增加:要多考慮很多方面的問題,比如一致性問題、如何保證訊息不被重複消費,如何保證保證訊息可靠傳輸。因此,需要考慮的東西更多,系統複雜性增大。
五、訊息佇列應用場景
1.非同步處理場景說明:
使用者註冊後,需要發註冊郵件和註冊簡訊。
2.應用解耦
場景說明:使用者下單後,訂單系統需要通知庫存系統。傳統的做法是,訂單系統呼叫庫存系統的介面。
3.流量削鋒
流量削鋒也是訊息佇列中的常用場景,一般在秒殺或團搶活動中使用廣泛。
應用場景:秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,一般需要在應用前端加入訊息佇列。
4.日誌處理:
日誌處理是指將訊息佇列用在日誌處理中,比如kafka的應用,解決大量日誌傳輸的問題。
5.訊息通訊:
訊息通訊是指,訊息佇列一般都內建了高效的通訊機制,因此也可以用在純的訊息通訊。比如實現點對點訊息佇列,或者聊天室等
docker簡介以及優缺點
docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。1.docker組成 乙個完整的docker有以下幾個部分組成 dockerclient客戶端 d...
Spring以及其優缺點。
什麼是spring spring 是乙個開源框架,是為了解決企業應用程式開發複雜性而建立的。在這篇由三部分組成的spring系列的第1 部分中,我將介紹spring框架。我先從框架底層模型的角度描述該框架的功能,然後將討論兩個最有趣的模組 spring面向方面程式設計 aop 和控制反轉 ioc s...
CSS Sprites簡介以及優缺點
css sprites簡介 通常被意譯為 css影象拼合 或 css貼圖定位 css sprites並不是一門新技術,目前它已經在網頁開發中發展得較為成熟,阿里巴巴各子公司的網頁中到處都可發現css sprites 的影子。但css sprites並不是什麼金科玉律,但在很多情況下,它有著一定的優勢...