RocketMQ消息发送之pull和push

RocketMQ学习(五)——RocketMQ消息发送之pull和push

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException {

       String group_name = "pull_producer";
        DefaultMQProducer producer = new DefaultMQProducer(group_name);
        producer.setNamesrvAddr("localhost:9876");
        
        producer.start();

        for (int i = 0; i < 5; i++) {
            try {
                Message msg = new Message("TopicPull",// topic
                    "TagA",// tag
                    ("Hello RocketMQ " + i).getBytes()// body
                        );
                SendResult sendResult = producer.send(msg,1000);
                System.out.println(sendResult);
                Thread.sleep(1000);
            } catch (Exception e) {
                e.printStackTrace();
                Thread.sleep(2000);
            }
        }

        producer.shutdown();
    }
}
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException {

       String group_name = "pull_producer";
        DefaultMQProducer producer = new DefaultMQProducer(group_name);
        producer.setNamesrvAddr("localhost:9876");
        
        producer.start();

        for (int i = 0; i < 5; i++) {
            try {
                Message msg = new Message("TopicPull",// topic
                    "TagA",// tag
                    ("Hello RocketMQ " + i).getBytes()// body
                        );
                SendResult sendResult = producer.send(msg,1000);
                System.out.println(sendResult);
                Thread.sleep(1000);
            } catch (Exception e) {
                e.printStackTrace();
                Thread.sleep(2000);
            }
        }

        producer.shutdown();
    }
}
import java.util.List;

import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer;
import org.apache.rocketmq.client.consumer.MQPullConsumer;
import org.apache.rocketmq.client.consumer.MQPullConsumerScheduleService;
import org.apache.rocketmq.client.consumer.PullResult;
import org.apache.rocketmq.client.consumer.PullTaskCallback;
import org.apache.rocketmq.client.consumer.PullTaskContext;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;

public class PullScheduleService {
	
    public static void main(String[] args) throws InterruptedException, MQClientException {

    	String group_name = "schedule_consumer";
    	String TOPIC_TEST = "TopicPull";
        
    	final MQPullConsumerScheduleService scheduleService = new MQPullConsumerScheduleService(group_name);  
    	
    	DefaultMQPullConsumer consumer = scheduleService.getDefaultMQPullConsumer();
    	
    	consumer.setNamesrvAddr("localhost:9876");
    	
    	scheduleService.setMessageModel(MessageModel.CLUSTERING);
    	
        scheduleService.registerPullTaskCallback(TOPIC_TEST, new PullTaskCallback() {
        	
            public void doPullTask(MessageQueue mq, PullTaskContext context) {
            	
                MQPullConsumer consumer = context.getPullConsumer();
                try {
                    //获取从哪里开始拉取
                    long offset = consumer.fetchConsumeOffset(mq, false);
                    if(offset < 0) {
                        offset = 0;
                    }
                    PullResult pullResult = consumer.pull(mq, "*", offset, 32);
                    switch (pullResult.getPullStatus()) {
                        case FOUND:
                            List<MessageExt> list = pullResult.getMsgFoundList();
                            for (MessageExt msg : list) {
                                System.out.println(new String(msg.getBody()));
                            }
                            break;
                        case NO_MATCHED_MSG:
                            break;
                        case NO_NEW_MSG:
                        case OFFSET_ILLEGAL:
                            break;
                        default:
                            break;
                    }
                    //存储offset,客户端每隔5s会定时刷新到broker
                    consumer.updateConsumeOffset(mq, pullResult.getNextBeginOffset());
                    //重新拉取 建议超过5s这样就不会重复获取
                    context.setPullNextDelayTimeMillis(6000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        scheduleService.start();
    }
    
}

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/85697690