一、RabbitMQ是什麼 RabbitMQ是一種常用的消息中間件,是基於AMQP協議,採用erlang語言開發的面向消息服務的中間件,是一個獨立的系統應用程式,可以管理伺服器計算資源和網路通信。一般可作為同構或異構系統間的數據交換平臺,由於erlang語言的高併發特性,使得RabbitMQ的性能較 ...
一、RabbitMQ是什麼
RabbitMQ是一種常用的消息中間件,是基於AMQP協議,採用erlang語言開發的面向消息服務的中間件,是一個獨立的系統應用程式,可以管理伺服器計算資源和網路通信。一般可作為同構或異構系統間的數據交換平臺,由於erlang語言的高併發特性,使得RabbitMQ的性能較好。應用較為廣泛。
二、RabbitMQ的使用場景
舉幾個例子,如果訂單系統最多能處理一萬次訂單,這個處理能力應付正常時段的下單時綽綽有餘,正常時段我們下單一秒後就能返回結果。但是在高峰期,如果有兩萬次下單操作系統是處理不了的,只能限制訂單超過一萬後不允許用戶下單。而使用消息中間件做緩衝,我們可以取消這個限制,把一秒內下的訂單分散成一段時間來處理,這時有些用戶可能在下單十幾秒後才能收到下單成功的操作,但是比不能下單的體驗要好。
簡單來說: 就是在訪問量劇增的情況下,但是應用依然能夠提供服務,比如“雙十一”下單的人多,但是淘寶這個應用仍然要運行,所以就可以使用消息中間件採用隊列的形式減少突然訪問的壓力。我們稱之為“流量削峰”。
第二個例子,以電商應用為例,應用中有訂單系統、庫存系統、物流系統、支付系統。用戶創建訂單後,如果耦合調用庫存系統、物流系統、支付系統,任何一個子系統出了故障,都會造成下單操作異常。當轉變成基於消息隊列的方式後,系統間調用的問題會減少很多,比如物流系統因為發生故障,需要幾分鐘來修複。在這幾分鐘的時間里,物流系統要處理的記憶體被緩存在消息隊列中,用戶的下單操作可以正常完成。當物流系統恢復後,繼續處理訂單信息即可,中間用戶感受不到物流系統的故障,降低了系統間的耦合性,但是卻提高了系統的複雜性,一定程度上提高了系統的可用性。我們稱之為“應用解耦”。
第三個例子,還是以電商應用為例,我們下單之後,需要調用庫存系統,查看當前庫存餘量是否支持訂單需要,這個時候訂單系統在向庫存系統發送下單申請後,它不能保證能夠立馬收到庫存系統的反饋,所以需要在庫存系統完成查詢後,再告訴訂單系統下單成功,這是一個非同步的過程,訂單系統無需因等待庫存系統回覆而阻塞。我們稱之為“非同步處理”。
三、RabbitMQ的組成
生產者:生產無非就是發送。發送消息的程式是生產者
隊列:隊列是 RabbitMQ 中存放消息的結構的名稱。 儘管消息流經 RabbitMQ 和您的應用程式,但它們只能存儲在隊列中。 隊列僅受主機記憶體和磁碟限制的約束,它本質上是一個大消息緩衝區。 許多生產者可以將消息發送到一個隊列,許多消費者可以嘗試從一個隊列接收數據。
消費者:消費者是一個主要等待接收消息的程式
交換機:本質上,消息的生產者並不知道自己產生的消息會具體發送至哪個隊列,生產者將消息傳遞給交換機,由交換機決定將消息發送至哪個隊列