目录
前言
上一章我们了解了RocketMQ的一些基本概念,这章我们将会通过一些实例结合实际场景对一些消费模式进行了解,并通过源码解读的形式,深入了解其原理
本章节所有代码可以前往github下载自行查看——rocket demo
1、拉取式消费 & 推动式消费
假如你订阅了一个微信公众号,那么你查看公众号消息的形式无外乎两种:
1. 公众号给你推送消息
2. 你主动点开公众号去查看消息
对于RocketMQ的消费者而言,也同样有这两种模式。
1.1 拉取式消费(Pull)
在RocketMQ使用拉取式消费,其实就是用户主动去获取一次该主题下队列的所有消息,然后根据不同的情况自行处理。
拉取式消费的用法相对比较复杂,我们要先需要通过DefaultMQPullConsumer获取订阅主题下的队列,遍历队列后取出队列里的消息。
这里只放部分代码,具体demo可以去GitHub上面查看
Set<MessageQueue> mqs = consumer.fetchSubscribeMessageQueues("TopicStudent");
for (MessageQueue mq : mqs) {
System.err.println("Consume from the queue: " + mq);
SINGLE_MQ:
while (true){
try {
PullResult pullResult = consumer.pullBlockIfNotFound(mq, null, getMessageQueueOffset(mq), 32);
System.out.println(pullResult);
putMessageQueueOffset(mq, pullResult.getNextBeginOffset());
switch (pullResult.getPullStatus()) {
case FOUND:
List<MessageExt> messageExtList = pullResult.getMsgFoundList();
for (MessageExt m : messageExtList) {
System.out.println(new String(m.getBody()));
}
break;
case NO_NEW_MSG:
break SINGLE_MQ;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
1.2 推动式消费(Push)
上面的拉取式消费还只是部分代码就已经这么繁琐,相对于拉取式消费,推动式消费的代码量就简洁多了:
public class EasyConsumer {
private DefaultMQPushConsumer consumer;
public EasyConsumer() throws Exception {
consumer = new DefaultMQPushC

本文深入探讨RocketMQ的消费模式,包括拉取式与推动式消费的原理与实践,广播消费与集群消费的区别,以及顺序消费的应用场景。通过代码示例,揭示RocketMQ如何在不同模式下高效处理消息。
最低0.47元/天 解锁文章
2541





