閱讀528 返回首頁    go iPhone_iPad_Mac_手機_平板_蘋果apple


消息過濾__特色功能_消息隊列 MQ-阿裏雲

消息過濾

本文描述MQ消費者如何根據Tag在MQ服務端完成消息過濾。

Tag,即消息標簽、消息類型,用來區分某個MQ的Topic下的消息分類。MQ允許消費者按照Tag對消息進行過濾,確保消費者最終隻消費到他關心的消息類型。

以下圖所示電商交易場景為例,從客戶下單到收到商品這一過程會生產一係列消息,比如訂單創建消息(order)、支付消息(pay)、物流消息(logistics)。這些消息會發送到Topic為Trade_Topic的隊列中,被各個不同的係統所接收,比如支付係統、物流係統、交易成功率分析係統、實時計算係統等。其中,物流係統隻需接收物流類型的消息(logistics),而實時計算係統需要接收所有和交易相關(order、pay、logistics)的消息。

消息過濾

說明:針對消息歸類,用戶可以選擇創建多個Topic, 或者在同一個Topic下創建多個Tag。但通常情況下,不同的Topic之間的消息沒有必然的聯係,而Tag則用來區分同一個Topic下相互關聯的消息,比如全集和子集的關係,流程先後的關係。

參考示例

發送消息

發送消息時,每條消息必須指明消息類型Tag:

Message msg = new Message("MQ_TOPIC","TagA","Hello MQ".getBytes());

消費方式-1

消費者如需訂閱某Topic下所有類型的消息,Tag用 * 符號表示:

consumer.subscribe("MQ_TOPIC", "*", new MessageListener() {
    public Action consume(Message message, ConsumeContext context) {
        System.out.println(message.getMsgID());
        return Action.CommitMessage;
    }
});

消費方式-2

消費者如需訂閱某Topic下某一種類型的消息,請明確標明Tag:

consumer.subscribe("MQ_TOPIC", "TagA", new MessageListener() {
    public Action consume(Message message, ConsumeContext context) {
        System.out.println(message.getMsgID());
        return Action.CommitMessage;
    }
});

消費方式-3

消費者如需訂閱某Topic下多種類型的消息,請在多個Tag之間用 || 分隔:

consumer.subscribe("MQ_TOPIC", "TagA||TagB", new MessageListener() {
    public Action consume(Message message, ConsumeContext context) {
        System.out.println(message.getMsgID());
        return Action.CommitMessage;
    }
});

消費方式-4(錯誤示例)

同一個消費者多次訂閱某Topic下的不同Tag,後者會覆蓋前者(錯誤示例) :

//如下錯誤代碼中,consumer隻能接收到MQ_TOPIC下TagB的消息,而不能接收TagA的消息。
consumer.subscribe("MQ_TOPIC", "TagA", new MessageListener() {
    public Action consume(Message message, ConsumeContext context) {
        System.out.println(message.getMsgID());
        return Action.CommitMessage;
    }
});
consumer.subscribe("MQ_TOPIC", "TagB", new MessageListener() {
    public Action consume(Message message, ConsumeContext context) {
        System.out.println(message.getMsgID());
        return Action.CommitMessage;
    }
});

最後更新:2016-05-06 10:44:49

  上一篇:go 運行 Demo__MQ Demo 工程_消息隊列 MQ-阿裏雲
  下一篇:go 集群消費和廣播消費__特色功能_消息隊列 MQ-阿裏雲