MST

星途 面试题库

面试题:消息队列RocketMQ的消息过滤机制中,Tag过滤的原理是什么及适用哪些应用场景?

请阐述RocketMQ Tag过滤方式在消息发送和接收时的具体运作原理,并且举例说明至少两个适合使用Tag过滤的实际应用场景。
48.5万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

RocketMQ Tag过滤方式原理

  1. 消息发送时:生产者在发送消息时,可以为每条消息设置一个或多个Tag。Tag本质上是消息的一个属性,生产者将消息发送到RocketMQ Broker时,消息中包含了设定的Tag信息。例如,使用Java代码发送消息时:
Message msg = new Message("TopicTest" /* Topic */,
    "TagA" /* Tag */,
    ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
producer.send(msg);

这里为消息设定了“TagA”这个Tag。 2. 消息接收时:消费者在订阅消息时,可以指定需要接收的Tag。消费者从Broker拉取消息时,Broker会根据消费者订阅的Tag对消息进行过滤,只将符合消费者所订阅Tag的消息推送给消费者。例如,消费者使用Java代码订阅消息:

consumer.subscribe("TopicTest", "TagA || TagB");

上述代码表示消费者订阅“TopicTest”主题下Tag为“TagA”或者“TagB”的消息。Broker会按照这个订阅条件,筛选出相应的消息推送给消费者。

适合使用Tag过滤的实际应用场景

  1. 订单系统:在电商的订单系统中,可能存在不同类型的订单消息,如“新订单消息”、“订单支付消息”、“订单发货消息”等。可以分别为这些消息设置不同的Tag,如“NewOrder”、“OrderPaid”、“OrderShipped”。消费者可以根据自己的需求订阅特定Tag的消息。例如,物流系统的消费者只需要订阅“OrderShipped”Tag的消息,这样就可以专注处理发货相关的订单消息,而不会收到其他无关的订单消息,如支付消息。
  2. 日志系统:对于日志收集和处理系统,不同类型的日志可以用不同的Tag标识。比如“SystemLog”(系统日志)、“BusinessLog”(业务日志)、“ErrorLog”(错误日志)等。数据分析模块可能只关心“BusinessLog”,用于分析业务行为和趋势;而运维团队可能更关注“ErrorLog”,以便及时发现和处理系统错误。通过Tag过滤,不同的消费者可以各取所需,提高系统的处理效率和针对性。