1. 程式人生 > >1.rabbitmq的介紹和基本使用

1.rabbitmq的介紹和基本使用

rabbitmq是一款訊息佇列。

首先什麼是訊息,訊息是指在應用間傳送的資料。訊息可以是簡單的字串, 也可以是一些複雜的物件。
訊息佇列則是應用間進行通訊的一種方式,訊息傳送後可以立即返回,由訊息系統來確保訊息的可靠傳遞。訊息釋出者只管把訊息釋出到 MQ 中而不用管誰來取,訊息使用者只管從 MQ 中取訊息而不管是誰釋出的。這樣釋出者和使用者都不用知道對方的存在。
可以類比一下,python中的佇列,也是為了不同執行緒之間進行資料共享,但是rabbitmq這款訊息佇列要遠比python中的佇列強大的多。

因此訊息佇列可以看成是應用之間的非同步協助機制,至於為什麼需要訊息佇列,可以想象在流量高峰時期,我們不可能臨時增加伺服器。但是又想支撐這麼大的流量,因此可以使用訊息佇列將操作進行非同步執行,比如使用者下單成功傳送簡訊,那麼我們沒必要非等到簡訊傳送成功結束流程,而是把傳送簡訊這條訊息放在佇列中,由另外的執行緒從訊息佇列中去取訊息,然後執行傳送簡訊的業務邏輯。

這是一個普通也是最簡單但也是效果最不好的執行流程

 

傳送郵件和簡訊變成非同步的了,效果有提升,但仍然不是最優的辦法

 

這種效果是最好的,因為傳送簡訊和郵件不是必須的業務邏輯。我們可以寫入一個訊息佇列,那麼另外的執行緒去獲取訊息然後執行,可以大大的提升效率。

再比如庫存系統,如果高峰時期,那麼會有大量的請求訪問庫存系統,這樣壓力會很大,那麼我們就可以將訊息寫入訊息佇列,直接返回使用者下單成功。然後庫存系統在獲取訊息佇列裡面的訊息,進行下單操作。

 

以及專門用來處理日誌的kafka也是同樣的道理

日誌採集客戶端,負責日誌資料採集,定時寫受寫入Kafka佇列


Kafka訊息佇列,負責日誌資料的接收,儲存和轉發
日誌處理應用:訂閱並消費kafka佇列中的日誌資料

 

看一張架構圖來理解rabbitmq的基本原理

clientA和clientB可以看成是訂單系統,往訊息佇列裡面傳送訊息,client123可以看成是庫存系統,往訊息佇列裡面取資料

解釋一下圖中的一些關鍵詞

Queue:
佇列,rabbitmq的作用是儲存訊息,那麼自然要有佇列來進行儲存。佇列的特點是先進先出,因此可以看出clientA和clientB是生產者,生產者生產訊息送到rabbitmq的內部物件Queue裡面去,而client123可以看成是消費者,消費者則是從佇列中取出資料,可以簡化為: