rocketMQ push消费模式

来源:互联网 发布:ubuntu获取文件夹权限 编辑:程序博客网 时间:2024/04/28 02:51
  1. public class PushConsumer {  
  2.   
  3.     /** 
  4.      * 当前例子是Push消费用法,使用方式给用户感觉是消息从RocketMQ服务器推到了应用客户端。
  5.      * 但是实际PushConsumer内部是使用长轮询Pull方式从Broker拉消息,然后再回调用户Listener方法
  6.      * @throws MQClientException  
  7.      */  
  8.     public static void main(String[] args) throws InterruptedException, MQClientException {  
  9.         /** 
  10.          * 一个应用创建一个Consumer,由应用来维护此对象,可以设置为全局对象或者单例<br> 
  11.          * 注意:ConsumerGroupName需要由应用来保证唯一 
  12.          */  
  13.         DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("testmerchantLeagueConsumerGroup");  
  14.         consumer.setNamesrvAddr("####ip:####port");  
  15.           
  16.         /** 
  17.          * 订阅指定topic下tags分别等于TagA或TagB 
  18.          */  
  19.         consumer.subscribe("zhaoleiTopic""TagB || TagA");  
  20.       
  21.   
  22.         /** 
  23.          * 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费<br> 
  24.          * 如果非第一次启动,那么按照上次消费的位置继续消费 
  25.          */  
  26.         consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);  
  27.   
  28.         consumer.registerMessageListener(new MessageListenerConcurrently() {  
  29.   
  30.             /** 
  31.              * 默认msgs里只有一条消息,可以通过设置consumeMessageBatchMaxSize参数来批量接收消息 
  32.              */  
  33.             @Override  
  34.             public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,  
  35.                     ConsumeConcurrentlyContext context) {  
  36.                 System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);  
  37.                 MessageExt msg = msgs.get(0);  
  38.                 if (msg.getTopic().equals("zhaoleiTopic")) {  
  39.                     // 执行zhaoleiTopic的消费逻辑  
  40.                     if (msg.getTags() != null && msg.getTags().equals("TagA")) {  
  41.                         // 执行TagA的消费  
  42.                         String message = new String(msg.getBody());  
  43.                         System.out.println(message);  
  44.                     }  
  45.                     else if (msg.getTags() != null && msg.getTags().equals("TagB")) {  
  46.                         // 执行TagB的消费  
  47.                         String message = new String(msg.getBody());  
  48.                         System.out.println(message);  
  49.                     }  
  50.                     
  51.                 }  
  52.                 //消费者向mq服务器返回消费成功的消息  
  53.                 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;  
  54.             }  
  55.         });  
  56.   
  57.         /** 
  58.          * Consumer对象在使用之前必须要调用start初始化,初始化一次即可<br> 
  59.          */  
  60.         consumer.start();  
  61.   
  62.         System.out.println("Consumer Started.");  
  63.     }  
  64. }  
0 0
原创粉丝点击