RocketMq源码分析之DefaultLitePullConsumer主动拉取消息分析consumeRequestCache
因为做RMQ的proxy的消费者的时候,消息消费只能主动拉取,然后就想去研究下RMQ中主动拉消息的消费者的源码,开始在网上搜到的都是讲DefaultMQPullConsumer的,然后我用的是RocketMq4.8.0的版本,在4.8中,这个类被标记为将要废弃,将被DefaultLitePullConsumer替代,于是今天就咱们就研究下DefaultLitePullConsumer.
和普通push模式的消费者一样是创建好对象,然后start,它的区别是需要主动去拿消息,然后去消费.
这里面又有两种拉取消息的方式,一种是assign,一种是subscribe.
assign是指定哪些队列去拉取,subscribe是只指定topic,然后由均衡策略去所有队列中选择队列拉取
这是subscribe
DefaultLitePullConsumer litePullConsumer = new DefaultLitePullConsumer("lite_pull_consumer_test");
litePullConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
litePullConsumer.subscribe("TopicTest", "*");
litePullConsumer.start();
try {
while (running) {
List<MessageExt> messageExts = litePullConsumer.poll();
System.out.printf("%s%n", messageExts);
}
} finally {
litePullConsumer.shutdown();
}
这是assign
DefaultLitePullConsumer litePullConsumer = new DefaultLitePullConsumer("please_rename_unique_group_name");
litePullConsumer.setAutoCommit(false);
litePullConsumer.start();
Collection<MessageQueue> mqSet = litePullConsumer.fetchMessageQueues("TopicTest");
List<MessageQueue> list = new ArrayList<>(mqSet);
List<MessageQueue> assignList = new ArrayList<>(