ActiveMQ之虛擬主題

虛擬主題主要用於什麼地方呢?這裏我們就來看一個運行場景,如一個系統中的消息消費者是有一個集羣組成的,這裏我們ActiveMQ需要發送M1~M8共8條消息,給A、B兩個消費者集羣進行消費,其示意圖如下:
在這裏插入圖片描述

效果如上,ActiveMQ發出M1~M8共8條消息,AB消費者集羣都可以接受到這8條消息,但是其內部就不能進行重複消費了,即集羣內部對消息應該進行分攤,那麼該需求我們該如何進行處理呢?


首先我們如果使用Queue模式的消息,那麼肯定不滿足需求,應該使用Queue的話,A、B集羣就無法獲取全部的消息,只會進行分攤消息,如下:
在這裏插入圖片描述

那麼如果使用Topic模式呢?肯定也不行,使用Topic模式,A、B集羣的確可以收到全部的消息,但是其集羣內部每個消費者也都會收到相同的8條消息,如下:
在這裏插入圖片描述


那麼我們應該如何解決呢?瞭解Queue和Topic模式特性的同學肯定都知道了,肯定是把Queue模式和Topic模式組合起來使用啦,在集羣外部進行接收消息使用Topic,集羣內部進行消費時使用Queue
在這裏插入圖片描述


上述的確可以使用該需求,不過實現方式繁重,需要獨立的中轉的消息訂閱者來完成,多了一次消息的投遞和一次消息消費過程,對效率有影響,增加了消息中間件負載壓力。所以ActiveMQ爲我們提供了虛擬主題的辦法。


對於消息發佈者來說,就是一個正常的Topic模式,名稱以VirtualTopic.開頭,如下:
在這裏插入圖片描述


對於消息接收端來說,則是個隊列,不同集羣中使用不同的前綴作爲集羣的名稱,即可表明該消費者在哪個集羣中,即可實現消費者集羣分組。

例如Consumer.A.VirtualTopic.bxs,說明它是名稱爲A集羣的消費端,我們可以定義多個Consumer.A.VirtualTopic.bxs,則說明A集羣中有多個消費者,同理Consumer.B.VirtualTopic.bxs說明是一個名稱爲B集羣的客戶端,如下:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


如上,我們啓動了兩個A集羣消費者,一個B集羣消費者(其餘代碼和我們之前介紹的一致),測試結果如下:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


所以從上述的使用來看,發現ActiveMQ虛擬主題的使用非常非常的簡單,其消息的發送者和消費者都是固定的,即

  • 默認虛擬主題消息生成者的前綴是:VirtualTopic.xxx
  • 默認虛擬主題消息消費者默認格式:Consumer.*.VirtualTopic.xxx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章