從零開始···AMQ主題模式實現

上一章實現了點對點的消息模式,接下來試着實現一下主題模式。
兩者代碼大致相同,但卻讓我糾結了好久才成功。
首先要理解一下主題模式的概念:
同樣是發佈者和消費者,這裏發佈者將消息發佈到一個主題下,這時,訂閱了這個主題的消費者就能接收到發佈的消息。
簡單來說,就像是訂閱雜誌,從你訂閱雜誌開始,你就能收到接下來出的雜誌,但你肯定收不到之前已經發布的雜誌。
這是與隊列不同的地方,隊列類似把消息放到一個地方,等着消費者過來取,取走了就沒了,只有一份;主題是把消息複製發送給所有訂閱了的消費者,只發送一次,所以後訂閱的收不到這個消息。
以上是我的理解,有錯誤的地方請指正,謝謝。
接下來就是代碼:
發佈者的代碼基本相同,唯一改變的地方是建立地址:
代碼
這裏用的是createTopic方法,因爲使用的是主題模式。
然後需要一個監聽器,相當於幫助消費者訂閱主題的:

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class MyMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
        try {
            System.out.println("topic message" + ((TextMessage) message).getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

然後就是消費者的代碼,同樣修改不是很大:
代碼
這裏修改了兩個地方,一個是創建地址改爲創建主題。另一個是將接收消息的操作交給監聽器執行。
代碼寫好以後,先運行消費者類,然後運行發佈者類。
在控制檯可以看到輸出:
結果
我這裏用了三個線程進行測試,可以看到三個消費者都分別拿到了消息數據。

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章