本文主要介紹RocketMQ中Topic、Tag、GroupName的概念、設計初衷以及使用方法。java
首先看看官方的定義:負載均衡
Topic是生產者在發送消息和消費者在拉取消息的類別。Topic與生產者和消費者之間的關係很是鬆散。具體來講,一個Topic可能有0個,一個或多個生產者向它發送消息;相反,一個生產者能夠發送不一樣類型Topic的消息。相似的,消費者組能夠訂閱一個或多個主題,只要該組的實例保持其訂閱一致便可。spa
Topic在Google翻譯中解釋爲話題。咱們能夠理解爲第一級消息類型,類比於書的標題。在應用系統中,一個Topic標識爲一類消息類型,好比交易信息。翻譯
在Producer中使用Topic:設計
Message msg = new Message("TopicTest" /* Topic */, "TagA",("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
在Consumer中訂閱Topic:code
consumer.subscribe("TopicTest", "*");
一樣,先看看官方怎麼定義的:事務
標籤,換句話的意思就是子主題,爲用戶提供了額外的靈活性。有了標籤,來自同一業務模塊的具備不一樣目的的消息能夠具備相同的主題和不一樣的標記。標籤有助於保持代碼的清晰和連貫,同時標籤也方便RocketMQ提供的查詢功能。get
Tag在Google翻譯中解釋爲標籤。咱們能夠理解爲第二級消息類型,類比於書的目錄,方便檢索使用消息。在應用系統中,一個Tag標識爲一類消息中的二級分類,好比交易信息下的交易建立、交易完成。class
在Producer中使用Tag:集羣
Message msg = new Message("TopicTest", "TagA" /* Tag */, ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
在Consumer中訂閱Tag:
consumer.subscribe("TopicTest", "TagA||TagB");// * 表明訂閱Topic下的全部消息
和現實世界中同樣,RocketMQ中也有組的概念。表明具備相同角色的生產者組合或消費者組合,稱爲生產者組或消費者組。
做用是在集羣HA的狀況下,一個生產者down以後,本地事務回滾後,能夠繼續聯繫該組下的另一個生產者實例,不至於致使業務走不下去。在消費者組中,能夠實現消息消費的負載均衡和消息容錯目標。
另外,有了GroupName,在集羣下,動態擴展容量很方便。只須要在新加的機器中,配置相同的GroupName。啓動後,就當即能加入到所在的羣組中,參與消息生產或消費。
在Producer中使用GroupName:
DefaultMQProducer producer = new DefaultMQProducer("group_name_1");// 使用GroupName來初始化Producer,若是不指定,就會使用默認的名字:DEFAULT_PRODUCER
在Consumer中使用GroupName:
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group_name_1");// 使用GroupName來初始化Consumer,若是不指定,就會使用默認的名字:DEFAULT_CONSUMER
RocketMQ使用Topic、Tag和GroupName簡單的3個概念,就能實現這些功能,敬佩實現它的做者們。