activeMQ Topic與隊列2種消息發送模式

activeMQ入門(發佈訂閱消息)服務器

深刻淺出 消息隊列 ActiveMQ併發


(1)、點對點方式(point-to-point)異步

點對點的消息發送方式主要創建在 Message Queue,Sender,reciever上,Message Queue 存貯消息,Sneder 發送消息,receive接收消息.具體點就是Sender Client發送Message Queue ,而 receiver Cliernt從Queue中接收消息和"發送消息已接受"到Quere,確認消息接收。消息發送客戶端與接收客戶端沒有時間上的依賴,發送客戶端能夠在任什麼時候刻發送信息到Queue,而不須要知道接收客戶端是否是在運行性能

(2)、發佈/訂閱 方式(publish/subscriber Messaging)測試

發佈/訂閱方式用於多接收客戶端的方式.做爲發佈訂閱的方式,可能存在多個接收客戶端,而且接收端客戶端與發送客戶端存在時間上的依賴。一個接收端只能接收他建立之後發送客戶端發送的信息。做爲subscriber ,在接收消息時有兩種方法,destination的receive方法,和實現message listener 接口的onMessage 方法。spa

發送消息的基本步驟:.net

(1)、建立鏈接使用的工廠類JMS ConnectionFactory線程

(2)、使用管理對象JMS ConnectionFactory創建鏈接Connection,並啓動orm

(3)、使用鏈接Connection 創建會話Session對象

(4)、使用會話Session和管理對象Destination建立消息生產者MessageSender

(5)、使用消息生產者MessageSender發送消息

 

消息接收者從JMS接受消息的步驟

(1)、建立鏈接使用的工廠類JMS ConnectionFactory

(2)、使用管理對象JMS ConnectionFactory創建鏈接Connection,並啓動

(3)、使用鏈接Connection 創建會話Session

(4)、使用會話Session和管理對象Destination建立消息接收者MessageReceiver

(5)、使用消息接收者MessageReceiver接受消息,須要用setMessageListener將MessageListener接口綁定到MessageReceiver消息接收者必須實現了MessageListener接口,須要定義onMessage事件方法。



          Topic和queue的最大區別在於topic是以廣播的形式,通知全部在線監聽的客戶端有新的消息,沒有監聽的客戶端將收不到消息;而queue則是以點對點的形式通知多個處於監聽狀態的客戶端中的一個。

 

2    topic和queue方式的消息處理效率比較

        經過增長監聽客戶端的併發數來驗證,topic的消息推送,是否會由於監聽客戶端的併發上升而出現明顯的降低,測試環境的服務器爲ci環境的ActiveMQ,客戶端爲個人本機。

        從實測的結果來看,topic方式發送的消息,發送和接收的效率,在一個訂閱者和100個訂閱者的前提下沒有明顯差別,但在500個訂閱者(線程)併發的前提下,效率差別很明顯(因爲500線程併發的狀況下,我本機的cpu佔用率已高達70-90%,因此沒法確認是我本機測試形成的性能瓶頸仍是topic消息發送方式存在性能瓶頸,形成效率降低如此明顯)。

        Topic方式發送的消息與queue方式發送的消息,發送和接收的效率,在一個訂閱者和100個訂閱者的前提下沒有明顯差別,但在500個訂閱者併發的前提下,topic方式的效率明顯低於queue。

        Queue方式發送的消息,在一個訂閱者、100個訂閱者和500個訂閱者的前提下,發送和接收的效率沒有明顯變化。


類型

Topic

Queue

概要

Publish Subscribe messaging 發佈訂閱消息

Point-to-Point 點對點

有無狀態

topic數據默認不落地,是無狀態的。

Queue數據默認會在mq服務器上以文件形式保存,好比Active MQ通常保存在$AMQ_HOME\data\kr-store\data下面。也能夠配置成DB存儲。

完整性保障

並不保證publisher發佈的每條數據,Subscriber都能接受到。

Queue保證每條數據都能被receiver接收。

消息是否會丟失

通常來講publisher發佈消息到某一個topic時,只有正在監聽該topic地址的sub可以接收到消息;若是沒有sub在監聽,該topic就丟失了。

Sender發送消息到目標Queue,receiver能夠異步接收這個Queue上的消息。Queue上的消息若是暫時沒有receiver來取,也不會丟失。

消息發佈接收策略

一對多的消息發佈接收策略,監聽同一個topic地址的多個sub都能收到publisher發送的消息。Sub接收完通知mq服務器

一對一的消息發佈接收策略,一個sender發送的消息,只能有一個receiver接收。receiver接收完後,通知mq服務器已接收,mq服務器對queue裏的消息採起刪除或其餘操做。

相關文章
相關標籤/搜索