RocketMQ使用mqadmin创建topic的时候有一个topicFilterType参数,这个有啥用呢?版本4.9.4
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 mqadmin
工具创建 Topic 时,topicFilterType
参数用于指定该 Topic 的消息过滤类型。这个参数的主要作用是定义消费者在订阅该 Topic 时可以使用的过滤方式。以下是关于 topicFilterType
参数的详细说明:
topicFilterType
决定了消息消费者在订阅该 Topic 时能够使用的过滤机制。RocketMQ 支持两种主要的消息过滤方式: - TAG 过滤:基于消息的 Tag 属性进行过滤。 - SQL92 过滤:基于 SQL 表达式对消息的属性进行更复杂的条件过滤。
通过设置 topicFilterType
,您可以为 Topic 预先定义支持的过滤类型,从而影响消费者的订阅行为。
topicFilterType
参数支持以下两种取值: - SINGLE_TAG
表示该 Topic 仅支持基于 Tag 的简单过滤。消费者在订阅时只能使用 Tag 进行消息过滤。例如,消费者可以通过指定 TagA
或 TagA || TagB
来订阅特定的消息子集。
attribute = 'value'
或 attribute > 100
等条件来筛选消息。在 RocketMQ 版本 4.9.4 中,topicFilterType
参数已经得到了支持。如果您未显式指定该参数,默认值通常为 SINGLE_TAG
,即仅支持基于 Tag 的过滤。
SINGLE_TAG
适用于简单的业务场景,消息分类较为明确且过滤逻辑简单。例如,订单系统中可以根据订单类型(如 OrderCreated
、OrderPaid
)使用不同的 Tag 进行区分。
SQL92
适用于复杂的业务场景,需要对消息的多个属性进行组合过滤。例如,物流系统中可以根据订单金额、配送区域等属性动态筛选消息。
性能影响
使用 SQL92 过滤可能会对性能产生一定影响,因为需要解析和匹配更多的消息属性。因此,在选择过滤类型时,应根据实际业务需求权衡性能与灵活性。
Topic 类型限制
不同类型的 Topic(如普通消息、顺序消息、事务消息等)可能对过滤方式有不同的限制。确保所选的 topicFilterType
与 Topic 的消息类型兼容。
消费者一致性
同一个 Group ID 下的所有消费者实例必须保持一致的订阅关系。如果部分消费者使用了不支持的过滤方式,可能会导致消息无法正确投递。
假设您需要创建一个名为 Trade_Topic
的 Topic,并希望支持 SQL92 过滤,可以使用以下命令:
mqadmin updateTopic -n <namesrvAddr> -c <clusterName> -t Trade_Topic --topicFilterType SQL92
如果仅需支持 Tag 过滤,则可以省略 --topicFilterType
参数或显式指定为 SINGLE_TAG
:
mqadmin updateTopic -n <namesrvAddr> -c <clusterName> -t Trade_Topic --topicFilterType SINGLE_TAG
topicFilterType
参数在 RocketMQ 中用于定义 Topic 的消息过滤方式,支持 SINGLE_TAG
和 SQL92
两种模式。选择合适的过滤类型可以帮助您更好地实现消息分类和消费逻辑,同时需要注意性能和订阅关系的一致性。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/