1 背景
最近在新项目开发中遇到一个有趣的问题,如何在 SpringBoot 项目中控制 RocketMQ 消费线程数量。如何设置单个 topic 消费线程的最小数量和最大数量,用来区分不同 topic 吞吐量不同。
我们先介绍一下 RocketMQ 消息监听再来说明 RocketMQ 消费线程。
2 RocketMQ 消息监听
设置消费者组为 my_consumer_group,监听 TopicTest 队列,并使用并发消息监听器MessageListenerConcurrently
1public class Consumer { 2 3 public static void main(String[] args) throws InterruptedException, MQClientException { 4 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("my_consumer_group"); 5 consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); 6 consumer.subscribe("TopicTest", "*"); 7 consumer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876"); 8 consumer.registerMessageListener(new MessageListenerConcurrently() { 9 @Override 10 public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, 11 ConsumeConcurrentlyContext context) { 12 System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs); 13 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; 14 } 15 }); 16 consumer.start(); 17 System.out.printf("Consumer Started.%n"); 18 } 19}
3 RocketMQ 中连接结构图
4 消费监听器
接口:org.apache.rocketmq.client.consumer.listener.MessageListener