本文主要介绍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个概念,就能实现这些功能,敬佩实现它的做者们。