標籤:寫日誌 資料庫 功能 速度 jms 發布訂閱 日誌 rabbitmq strong
歸納總結
JMS “ 一個中心,兩種模式,三步實現”
- 1 以 Message Service器為中心
訊息生產者 通過用戶端發訊息給Message Service器; 訊息消費者通過Message Service器接收訊息;
- 2 兩種訊息發送模型
兩種訊息發送模型規範:點對點、發布訂閱 ;
- 3 實現方法分為三步
3.1、 整合通訊伺服器,建立串連Connections ;
3.2 、通過串連建立隊列會話session;
3.3 、準備就緒後,執行 生產者 發訊息和消費者 接訊息(非同步)。
優點 解耦合、非同步
也就是你有一個程式在產生內容然後入隊(生產者)
另一個程式讀取內容,內容出隊(消費者)
訊息佇列典型應用情境:
比如你寫日誌,因為可能一個用戶端有多個操作去寫,又有很多個用戶端,顯然並發不能無窮大,於是你就需要把寫日誌的請求放入到訊息佇列裡,在消費者那邊依次把隊列中產生的日誌寫到資料庫裡。
至於怎麼實現訊息佇列,其實你本身一個普通的隊列就行呀~看你需要什麼附加功能而已。
訊息佇列有無數開源實現,一般沒必要自己實現。zmq也好rabbitmq也好甚至redis也好,找一個合適的裝上用就行
就好像rdbms/nosql一樣
技術都是解決問題的,訊息佇列解決的是將突發大量請求轉換為後端能承受的隊列請求,比如你的伺服器一秒能處理100個訂單,但秒殺活動1秒進來1000個訂單,持續10秒,在後端能力無法增加的情況下,你可以用訊息佇列將總共10000個請求壓在隊列裡,後台consumer按原有能力處理,100秒後處理完所有請求(而不是直接宕機丟失訂單資料)
所以說首先別自己實現訊息佇列(在你用過各種訊息佇列,還看過一兩份源碼之前),其次沒有合適的需求別用訊息佇列
通俗的說,就是一個容器,你把訊息丟進去,不需要立即處理。然後有個程式去從你的容器裡面把訊息一條條讀出來處理。
訊息佇列,可以是activeMQ,kafka之類的,也可以是資料庫的一張任務表。
個人覺得訊息佇列,主要有兩個作用:
- 降低耦合
- 訊息可以暫時存在在訊息佇列中,等待訊息接收者根據自身的負載處理能力控制處理訊息的處理速度,減小在大並發訪問時候的壓力。
java訊息佇列