RocketMQ的订阅关系(topic tag和GID)

时间:2024-05-19 15:09:02

RocketMQ的订阅关系(topic tag和GID)

GID是集群编码,一个消费者集群中,topic和tag是一致的,
比如说项目部署在三台机器上,就会启动三个mq的客户端,这三个客户端都属于同一个集群,就是同一个GID下面,消费的时候,这三台其中之一消费成功就行了,不需要每台都消费一遍,这是集群消费模式。

那是生产者的GID,就是发送消息的机器集群,我们用topic来代表大的消息类型,然后用tag来代表大类型里面的小类型,比如说审批-付款 , 这个是在发送的时候,也就是生产者。

然后作为消费者,其他业务方消费的话,就是要用topic和tag来唯一指定消费哪个消息, 而且一个GID里的所有消费者 订阅时候都是相同的topic和tag

RocketMQ的订阅关系(topic tag和GID)

为什么集群中的topic和tag要一致

订阅以集群为单位,如果集群中消费者1订阅了topicA, 消费者2订阅topicB,那么会覆盖,二者只有一个成功订阅。 这是第一个问题

第二个问题就是集群中会进行分摊,比如说消费者1 订阅了topicA ,来了100个topicA的消息, 也会分50个给消费者2 。

但是消费者2订阅的是topicB ,这样就有问题了。

RocketMQ的订阅关系(topic tag和GID)

Topic 和 Tag 的定义如下:

Topic
消息主题,通过 Topic 对不同的业务消息进行分类。
Tag
消息标签,用来进一步区分某个 Topic 下的消息分类,消息从生产者发出即带上的属性。

总的来说,针对消息分类,可以选择创建多个 Topic,或者在同一个 Topic 下创建多个 Tag。但通常情况下,不同的 Topic 之间的消息没有必然的联系,而 Tag 则用来区分同一个 Topic 下相互关联的消息,例如全集和子集的关系、流程先后的关系。

生产者只需要告诉消费者,消息的topic和tag是什么就行了,消费者通过topic+tag来确定一条消息

参考:
为什么订阅关系要一致
https://www.jianshu.com/p/a8eef6ff70bf

Topic 与 Tag 最佳实践
https://help.aliyun.com/document_detail/95837.html?spm=a2c4g.11186623.4.1.366a3702SCv5iH

订阅关系一致
https://help.aliyun.com/document_detail/43523.html?spm=a2c4g.11186623.6.721.2a1738cbmijqaI