美文网首页
RocketMQ 一个topic 多个消费者只有一个消费的问题

RocketMQ 一个topic 多个消费者只有一个消费的问题

作者: 索性流年 | 来源:发表于2020-08-25 16:04 被阅读0次

    前言

    • 很多时候,我们会在多个地方同时订阅一个 topic,但是发现消费者只能执行一个
    • 后注册消费者会顶替之前注册的消费者

    原因

    • subscribeTablesubscriptionInner 方法中,是使用 Map 集合的方式存储topic订阅者
    • 存储格式 大概{group : topic}
    • Map 的特性就是 Key 不能重复,所以相同的 Key 会直接替换

    解决方法

    • 更改 subscribeTablesubscriptionInner 方法存储的 Key
    • 也就是创建多个消费组,同时订阅一个topic

    案例

    • 消费者1 yml 配置
    rocketmq:
      name-server: 192.168.112.140:9876
      producer:
        group: member_synchronization_group
    
    • 消费者 1 实现消费
    @Service
    @RocketMQMessageListener(topic = "mysql-redis-topic", consumerGroup = "member_synchronization_group")
    public class MemberListener implements RocketMQListener<String> {
        @Autowired
        private RedisUtil redisUtil;
        @Override
        public void onMessage(String message) {
            System.out.println("接收消息:" + message);
        }
    }
    
    
    • 消费者 2 yml 配置
    rocketmq:
      name-server: 192.168.112.140:9876
      producer:
        group: goods_synchronization_group
    
    • 消费者 3 实现消费
    @Service
    @RocketMQMessageListener(topic = "mysql-redis-topic", consumerGroup = "goods_synchronization_group")
    public class GoodsListener implements RocketMQListener<String> {
        @Autowired
        private RedisUtil redisUtil;
        @Override
        public void onMessage(String message) {
            System.out.println(message);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:RocketMQ 一个topic 多个消费者只有一个消费的问题

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