美文网首页
RocketMq Tag

RocketMq Tag

作者: holmes000 | 来源:发表于2020-07-17 14:20 被阅读0次

到底什么时候该用 Topic,什么时候该用 Tag?

• 消息类型是否一致:如普通消息、事务消息、定时(延时)消息、顺序消息,不同的消息类型使用不同的 Topic,无法通过 Tag 进行区分。
• 业务是否相关联:没有直接关联的消息,如淘宝交易消息,京东物流消息使用不同的 Topic 进行区分;而同样是天猫交易消息,电器类订单、女装类订单、化妆品类订单的消息可以用 Tag 进行区分。
• 消息优先级是否一致:如同样是物流消息,盒马必须小时内送达,天猫超市 24 小时内送达,淘宝物流则相对会慢一些,不同优先级的消息用不同的 Topic 进行区分。
• 消息量级是否相当:有些业务消息虽然量小但是实时性要求高,如果跟某些万亿量级的消息使用同一个 Topic,则有可能会因为过长的等待时间而“饿死”,此时需要将不同量级的消息进行拆分,使用不同的 Topic。
总的来说,针对消息分类,您可以选择创建多个 Topic,或者在同一个 Topic 下创建多个 Tag。但通常情况下,不同的 Topic 之间的消息没有必然的联系,而 Tag 则用来区分同一个 Topic 下相互关联的消息,例如全集和子集的关系、流程先后的关系。
通过合理的使用 Topic 和 Tag,可以让业务结构清晰,更可以提高效率。

Tag 怎么实现消息过滤

RocketMQ分布式消息队列的消息过滤方式有别于其它MQ中间件,是在Consumer端订阅消息时再做消息过滤的。RocketMQ这么做是在于其Producer端写入消息和Consumer端订阅消息采用分离存储的机制来实现的,Consumer端订阅消息是需要通过ConsumeQueue这个消息消费的逻辑队列拿到一个索引,然后再从CommitLog里面读取真正的消息实体内容,所以说到底也是还绕不开其存储结构。其ConsumeQueue的存储结构如下,可以看到其中有8个字节存储的Message Tag的哈希值,基于Tag的消息过滤正式基于这个字段值的。


image.png

Tag过滤方式:

Consumer端在订阅消息时除了指定Topic还可以指定TAG,如果一个消息有多个TAG,可以用||分隔。其中,Consumer端会将这个订阅请求构建成一个 SubscriptionData,发送一个Pull消息的请求给Broker端。Broker端从RocketMQ的文件存储层—Store读取数据之前,会用这些数据先构建一个MessageFilter,然后传给Store。Store从 ConsumeQueue读取到一条记录后,会用它记录的消息tag hash值去做过滤,由于在服务端只是根据hashcode进行判断,无法精确对tag原始字符串进行过滤,故在消息消费端拉取到消息后,还需要对消息的原始tag字符串进行比对,如果不同,则丢弃该消息,不进行消息消费。

相关文章

  • RocketMq 堆积查询

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 Rocke...

  • RocketMq 事务消息

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 Rocke...

  • RocketMq 消费位点上报

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 Rocke...

  • RocketMq 消息查询

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 Rocke...

  • RocketMQ 同步调用的新特性

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 开篇 这个...

  • RocketMq 广播模式

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 开篇 这个...

  • RocketMq 消息Tag过滤

    系列 RocketMq 消息Tag过滤 RocketMq 广播模式 RocketMQ 同步调用的新特性 开篇 这个...

  • RocketMq Tag

    到底什么时候该用 Topic,什么时候该用 Tag? • 消息类型是否一致:如普通消息、事务消息、定时(延时)消息...

  • RocketMQ系列(三):producer

    rocketMq消息体 properties扩展中存了什么呢 tag: 消息tag,用于消息过滤 keys:mes...

  • RocketMQ 与 Spring Cloud Stream整合

    RocketMQ 提供了两种方式给 Consumer 进行消息的过滤: 基于 Tag 过滤标签(Tag):为消息设...

网友评论

      本文标题:RocketMq Tag

      本文链接:https://www.haomeiwen.com/subject/styghktx.html