consumer.setConsumeThreadMax(1);
consumer.setConsumeThreadMin(1);
consumer.setConsumeThreadMin(1);
// 一个应用创建一个Consumer,由应用来维护此对象,可以设置为全局对象或者单例,ConsumerGroupName需要由应用来保证唯一
final DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(rocketMQConfig.getConsumerGroup());
consumer.setNamesrvAddr(rocketMQConfig.getNamesrvAddr());
// 订阅指定topic下tags分别等于TagA或TagC或TagD
//consumer.subscribe("Topic1", "TagA || TagC || TagD");
// 订阅指定topic下所有消息,注意:一个consumer对象可以订阅多个topic
consumer.subscribe(rocketMQConfig.getSmsReceiptTopic(), "*");
consumer.setVipChannelEnabled(false);
// 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费 如果非第一次启动,那么按照上次消费的位置继续消费
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
//单线程处理设置最大线程,最小线程也要设置,不然启动报错
consumer.setConsumeThreadMax(1);
consumer.setConsumeThreadMin(1);
//默认msgs里只有一条消息,可以通过设置consumeMessageBatchMaxSize参数来批量接收消息
//MessageListenerOrderly一个线程一个队列顺序接收
consumer.registerMessageListener((MessageListenerOrderly) (msgs, context) -> {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
MessageExt msg = (MessageExt) msgs.get(0);
String msgBody = new String(msg.getBody());
//短信回执主题
if (msg.getTopic().equals(rocketMQConfig.getSmsReceiptTopic())) {
log.info("消费者接收到短信回执消息:[{}]", msgBody);
httpSmsSvc.handleSmsReplyAndReport(msgBody);
} else {
log.error("出现意料之外的消息:[{}]", msg.toString());
}
return ConsumeOrderlyStatus.SUCCESS;
});
// Consumer对象在使用之前必须要调用start初始化,初始化一次即可
consumer.start();
System.out.println("Consumer Started.");
Runtime.getRuntime().addShutdownHook(new Thread(consumer::shutdown));