在使用RocketMQ同一个topic不同tag,订阅关系组(subscriptionTable)中为什么只能对应一个消费者对象?
根据看源码和网上查询得知,Subcription对象中只equals判断topic属性。关于问题的源码解析:阿里云RocketMQ的订阅类Subscription的HashCode及Equals的设计问题
根据图片可以看到,在debug过程中,订阅关系中只有一个对象,但是被我配置了注解(topic相同但tag不同的对象)有8个。
我想请问如何在现有业务条件不变的情况下,将8个对象和8个Subcription注册进table中,并实现8个消费对象监听8个不同tag的业务吗?
RocketMQ 同一个 topic 不同 tag,订阅关系组中只能对应一个消费者对象,是因为 RocketMQ 的订阅关系是基于 tag 来进行划分的。当一个 topic 有多个 tag 时,每个 tag 对应一个订阅关系组。而一个消费者对象只能属于一个订阅关系组,因此同一个 topic 不同 tag,订阅关系组中只能对应一个消费者对象。
如果需要对同一个 topic 不同 tag 的消息进行消费,可以创建多个订阅关系组,每个订阅关系组使用不同的消费者对象进行消费。也可以使用 Consumer Group 的方式,将多个消费者对象组合成一个消费者组,然后将该消费者组订阅到同一个 topic 不同 tag。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/