ActiveMQ多種消息類型

在介紹使用原生ActiveMQ的API編程 我們使用的是最爲常見的TextMessage,除了這種類型外,我們在JMS和ActiveMQ安裝中還提到過MapMessage、BytesMessage、StreamMessage 和 ObjectMessage消息類型。
在這裏插入圖片描述


TextMessage

這裏我們就來簡單看一看其餘幾種消息類型的使用,這裏我們就在原來介紹使用原生ActiveMQ的API編程 例子上進行修改,首先是TextMessage,這種消息類型這裏就不重複介紹了,之前的例子就是,如下:
在這裏插入圖片描述
在這裏插入圖片描述




MapMessage

接下來我們就來介紹下MapMessage,如下:
在這裏插入圖片描述

我們在發送不同消息類型後,消息消費者這時就需要通過instanceof來判斷下消息類型,然後再進行處理
在這裏插入圖片描述

異步消費消息的方式其實也一模一樣的,這裏就不贅述了。




BytesMessage

消息生產者發送消息如下:
在這裏插入圖片描述

消息消費者接受消息進行消費,如下:
在這裏插入圖片描述




ObjectMessage

ObjectMessage可以用來傳輸Java Bean對象,這裏肯定是需要進行序列化的,所以我們的Java Bean對象就必須要實現java.io.Serializable接口

public class User implements Serializable{

    private static final long serialVersionUID = 412718673804689450L;
    
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

然後再其餘的地方就沒有什麼特殊的了,和我們之前的使用方法類型
在這裏插入圖片描述

在這裏插入圖片描述


但是我們在Netty中,就曾介紹過Java本身序列化的缺點,比如效率低,產生的字節碼較大,所以一般不被推薦使用。


這裏我們就可以使用Netty中介紹過的幾種序列化框架,如protobuf,kyro,messgepack等,就可以將Java Bean轉化爲byte[]數組,然後就可以通過上述的 ByteMessage 來使用。


如果你覺得引入序列化框架也是比較麻煩的,那麼還可以使用JSON來解決,我們將Java Bean轉化爲json字符串來使用 TextMessage 來傳輸也是可以的。




StreamMessage

StreamMessage就比較類似於我們在網絡編程 中,使用的方式,如下:
在這裏插入圖片描述

在這裏插入圖片描述

這種方式我們一般使用較少,因爲這種方式下,如果我們消息內容變成改變,比如新增一個字段或減少一個字段,那麼我們在消息的發送和消費時,都需要做出對應的修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章