activeMQ個人理解總結

happym_m發表於2018-10-09

原文地址

個人理解總結

activeMQ是什麼?

  是Apache公司旗下的一個訊息匯流排

ActiveMQ是一個開源相容Java Message  Service  (JMS) 1.1面向訊息的中件間. 來自Apache Software Foundation. ActiveMQ提供鬆耦合的應用程式架構. 

activeMQ能幹什麼?

  用來在服務與服務之間進行非同步通訊的

activeMQ優勢

1.流量肖鋒

2.任務非同步處理

特點:可以解耦合

  (學習新技術的三要素:是什麼?能幹什麼?有什麼優勢?)

 

 圖1:

 

 

通訊模式:

1.點對點(queue)

》一個訊息只能被一個服務接收

》訊息一旦被消費,就會消失

》如果沒有被消費,就會一直等待,直到被消費

》多個服務監聽同一個消費空間,先到先得

詳解:這個特點的原理是這樣的,在activeMQ

2.釋出/訂閱模式(topic)

   》一個訊息可以被多個服務接收

  》訂閱一個主題的消費者,只能消費自它訂閱之後釋出的訊息。

  》消費端如果在生產端傳送訊息之後啟動,是接收不到訊息的,除非生產端對訊息進行了持久化(例如廣播,只有當時聽到的人能聽到資訊)

 

  圖2:

  

 

注:訊息是被推送和拉取的(訊息生產端和消費端),不是mq伺服器去主動傳送的

總:一些簡單常用的應用場景

1.傳送郵件

詳解:

  最經典的就是當使用者註冊時,我們就需要用activeMQ來做為中介軟體,當使用者註冊後,我門把使用者的郵箱號和驗證碼等資訊通過activeMQ的生產端傳送到activeMQ的訊息佇列中,而一旦訊息佇列中出現了資料,我們的郵件模組通過實時的監控activeMQ的訊息佇列就能通過消費端獲取到這個資料,染回郵件模組就會自行的去對資料進行解析,給使用者傳送郵件

2.傳送簡訊

詳解:

  原理同傳送郵件相同

3.同步索引庫

詳解:

  為了緩解資料庫的壓力,我們把經常被呼叫的資料放入索引庫中,當有請求查詢時,我們會先去查詢索引庫,如果索引庫內有資料,那麼我們就不用就資料庫進行查詢,這樣就能大大的減輕伺服器的壓力,可是隨之而來的一個問題是,假如我們伺服器內的資料已經發生了改變,而瀏覽使用者查詢資料時,因為索引庫中已經有資料了,那麼這樣一來資料庫與索引庫的資料就不一致了,那麼怎麼解決這個問題呢?我們想到了通過用activeMQ來監聽資料庫的操作來實現資料庫與索引庫的資料同步,當後臺管理員或房產經紀人對資料庫的資料進行了增刪改的操作時,我們通過activeMQ監聽到了資料的改變,獲取到被修改的資料的id,然後在另一個服務模組中通過這個資料的id去資料庫先查詢一把,然後根據查詢結果進行判斷,再去做索引庫的資料同步。打個比方,如果查詢結果返回的是空,就說明商品已經被刪除,那麼我們就可以根據資料的id去把索引庫中的資料也一併刪除了。

4.同步靜態頁面

詳解:

  此原理同上一個同步索引庫是一個原理,目的都是為了減緩伺服器的壓力,我們經過資料分析發現,其實我們的一些商品詳情頁面的資料其實都是大同小異的,完全可以通過freemarker頁面靜態化的模組加上後臺查詢出的資料拼裝成一個靜態頁面,而這些資料從哪來呢?我們經過討論和研究,最後一致認為還是放在緩衝中比較好,這樣一來就能大大的減輕了資料 庫的壓力,而另一個好處是,由於頁面是純靜態頁面,所以頁面上的資料都是死資料,這樣一來就不用像JSP動態頁面那樣需要和後臺資料庫有大量的資料互動,可以最大化的降低伺服器的壓力,其實這個技術已經有很多大型公司在使用了,比如淘寶,京東,網易等,我們要是細心一些就會發現,他們的頁面其實就都是HTML格式的靜態頁面。

相關文章