深入浅出RocketMQ(四):广播、集群、拉取、推送、顺序消费

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

前言

    上一章我们了解了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
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值