SpringBoot整合RocketMQ实例(整理三 消费者)

匿名 (未验证) 提交于 2019-12-03 00:03:02

MsgConsumer .java

import javax.annotation.PostConstruct; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.consumer.ConsumeFromWhere; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.remoting.common.RemotingHelper;  @Component public class MsgConsumer {     //消费者的组名     @Value("${apache.rocketmq.consumer.PushConsumer}")     private String consumerGroup;      //NameServer 地址     @Value("${apache.rocketmq.namesrvAddr}")     private String namesrvAddr;      @PostConstruct//spring初始化注解,只会调用一次     public void defaultMQPushConsumer() {         //消费者的组名         DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);         //指定NameServer地址,多个地址以 ; 隔开         consumer.setNamesrvAddr(namesrvAddr);         try {             //设置consumer所订阅的Topic和Tag,*代表全部的Tag             //consumer.subscribe("testOrderTopic", "*");             consumer.subscribe("testOrderTopic", "order");             //consumer.subscribe("testCommentTopic", "comment");             //CONSUME_FROM_LAST_OFFSET 默认策略,从该队列最尾开始消费,跳过历史消息             //CONSUME_FROM_FIRST_OFFSET 从队列最开始开始消费,即历史消息(还储存在broker的)全部消费一遍             consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);             //MessageListenerOrderly 这个是有序的             //MessageListenerConcurrently 这个是无序的,并行的方式处理,效率高很多             consumer.registerMessageListener((MessageListenerConcurrently) (list, context) -> {                 try {                     for (MessageExt messageExt : list) {                         System.out.println("messageExt: " + messageExt);//输出消息内容                         String messageBody = new String(messageExt.getBody(), RemotingHelper.DEFAULT_CHARSET);                         System.out.println("消费响应:msgId : " + messageExt.getMsgId() + ",  msgBody : " + messageBody);//输出消息内容                     }                 } catch (Exception e) {                     e.printStackTrace();                     return ConsumeConcurrentlyStatus.RECONSUME_LATER; //稍后再试                 }                 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; //消费成功             });             consumer.start();         } catch (Exception e) {             e.printStackTrace();         }     } }



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!