面试题答案
一键面试Tag过滤
- 原理:在消息发送端,为消息设置一个或多个Tag,消费者通过指定Tag来接收特定的消息。RocketMQ在存储消息时,会将消息的Tag信息一并存储。当消费者订阅消息时,RocketMQ根据消费者指定的Tag,快速筛选出符合条件的消息进行投递。
- 使用场景:适用于消息类型比较明确,且可以简单通过几个标签进行分类的场景。例如在电商系统中,将消息分为“订单消息”“商品消息”“物流消息”等,消费者可以根据自身需求订阅特定类型的消息。
- 优点:
- 简单易用,对开发人员友好,只需要在发送和订阅时设置好Tag即可。
- 性能较高,因为RocketMQ在底层存储和检索时针对Tag做了优化,能够快速定位到符合条件的消息。
- 缺点:
- 过滤条件相对单一,只能通过Tag进行筛选,无法满足复杂的业务逻辑过滤需求。
- 灵活性较差,如果业务需求发生变化,需要修改消息的Tag分类,可能会涉及到较多的代码修改。
SQL92过滤
- 原理:RocketMQ支持使用SQL92语法对消息进行过滤。在消息发送端,可以为消息设置一些属性(类似数据库表中的字段)。消费者订阅消息时,通过编写SQL92语句,根据消息的属性进行过滤。RocketMQ在接收到消费者的订阅请求后,会解析SQL语句,并在存储的消息中筛选出符合条件的消息。
- 使用场景:适用于需要根据多种条件进行复杂过滤的场景。比如在物联网场景中,设备上报的消息带有设备ID、温度、湿度等多种属性,消费者可能需要根据设备ID范围、温度阈值等条件来获取特定的消息。
- 优点:
- 过滤条件丰富,可以根据消息的多个属性进行复杂的逻辑组合过滤,满足各种复杂业务需求。
- 灵活性高,业务需求变化时,只需要修改SQL语句,而不需要大量修改代码。
- 缺点:
- 对开发人员要求较高,需要掌握SQL92语法,增加了开发难度。
- 性能相对Tag过滤较低,因为SQL解析和消息匹配的过程相对复杂,会消耗更多的系统资源。