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