Rocketmq提供了两种主要的消费模式:推送式消费(Push Consumer)和 拉取式消费(Pull Consumer)

一、Consumer消费消息的基本流程

1、实例化Consumer:创建并配置一个Consumer实例

2、订阅主题:指定要订阅的主题和标签

3、注册消息监听器:开始消费消息

4、启动Consumer:开始消费消息

5、处理消息:在监听器中处理接收到的消息

代码示例

详细解释

1、Consumer实例化:

  • 使用DefaultMQPushConsumer类拆功能键Consumer实例化,并指定Consumer Group

  • Consumer Group用于标识一组具有相同角色的Consumer实例

2、设置NameServer地址:

  • 使用 setNamesrvAddr方法设置Rocketmq的NameServer地址

3、订阅主题:

  • Subscribe方法用于订阅指定的主题

  • 第一个参数是主题名,第二个参数是标签过滤表达式。"*"表示订阅该主题下的所有消息

4、注册消息监听器:

  • registerMessageListener方法用于注册一个消息监听器

  • 这里使用的是 MessageListenerConcurrently接口,消息并行处理,不保证顺序,但吞吐量高

  • 使用是MessageListenerOrderly接口,单队列单线程处理,保证消息顺序(但性能较低)

  • 在consumeMessage方法中实现具体的消息处理逻辑

5、消息处理:

  • 在监听器的consumeMessage方法中,我们遍历收到的消息列表并打印消息内容

  • 返回 ConsumeConcurrentlyStatus.CONSUME_SUCCESS,表示消息已成功消费

  • 返回 ConsumeConcurrentlyStatus.RECONSUME_LATER,表示消息已失败消息,稍后重试

6、启动 Consumer:

  • 调用start方法启动Consumer实例开始消费消息

其它重要概念

1、消费模式:

  • Push 模式(DefaultMQPushConsumer):Broker 主动推送消息给 Consumer(底层仍是 Consumer 长轮询)

  • Pull模式:Consumer主动从Broker拉取消息

2、消费过滤:

  • 可以通过标签(Tag)或 自定义属性进行消息过滤

3、消费进度:

  • Rocketmq会自动管理消费进度,确保消息不会重复消费

4、消息失败处理:

  • 如果消息处理失败,可以返回 ConsumeConcurrentlyStatus.RECONSUME_LATER,Rocketmq会稍后重试

  • 默认最多重试 16次,之后转入死信队列(%DLQ%+ConsumerGroup)

5、消息消费模式(负载均衡):

  • 集群模式:

    • 同一 Consumer Group 下的多个实例 均分队列(如 4 个队列 + 2 个 Consumer,每个 Consumer 处理 2 个队列)

    • 通过 RebalanceService 定时(默认 20s)重新分配队列

  • 广播模式:

    • 每个 Consumer 实例消费 全量队列

RocketMQ的Consumer是如何消费消息的的更多相关文章

  1. 广播消费:允许一个 Group ID 所标识的所有 Consumer 都会各自消费某条消息一次。

    什么是消息队列 RocketMQ?_消息队列 RocketMQ-阿里云 https://help.aliyun.com/document_detail/29532.html 2019-01-30 16 ...

  2. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...

  3. 综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    来源:http://t.cn/RVDWcfe 一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写 ...

  4. RocketMQ之消费者启动与消费流程

    vivo 互联网服务器团队 - Li Kui 一.简介 1.1 RocketMQ 简介 RocketMQ是由阿里巴巴开源的分布式消息中间件,支持顺序消息.定时消息.自定义过滤器.负载均衡.pull/p ...

  5. RocketMQ学习笔记(13)----RocketMQ的Consumer消息重试

    1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次 ...

  6. rocketmq 以广播方式实现消费者消费消息

    package com.bfxy.rocketmq.model; import java.util.List; import org.apache.rocketmq.client.consumer.D ...

  7. rocketmq的以集群模式MessageModel.CLUSTERING实现消费者集群消费消息,实现负载均衡

    package com.bfxy.rocketmq.model; import java.util.List; import org.apache.rocketmq.client.consumer.D ...

  8. 分布式开放消息系统RocketMQ的原理与实践(消息的顺序问题、重复问题、可靠消息/事务消息)

    备注:1.如果您此前未接触过RocketMQ,请先阅读附录部分,以便了解RocketMQ的整体架构和相关术语2.文中的MQServer与Broker表示同一概念 分布式消息系统作为实现分布式系统可扩展 ...

  9. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

  10. PushConsumer 消费消息

    CLUSTERING 模式下,消费者会订阅 retry topic // DefaultMQPushConsumerImpl#copySubscription private void copySub ...

随机推荐

  1. dart变量声明和变量类型

    ps==>所有的代码必须放在main方法中 main方法有两种写法 1==> main() { print("你好,dart我们相遇了"); } 2==> voi ...

  2. Docker安装教程

    这里介绍两种安装方法:centsOS安装和Ubuntu安装 CentOS安装 linux内核版本建议3.8以上,作者本人使用的是3.10:查看内核版本命令:uname -r 一般CentOS7以上都可 ...

  3. Idea报错 【cannot access com.xxx】的【解决办法】

    正常操作代码,一个类突然标红,提示 cannot access com.xxx . 执行下面操作,执行完后项目变为正常 但是如果是你代码存在异常,可不是清缓存就能解决了,就要靠自己了哈哈 第一步Fil ...

  4. SqlServer中根据某几列获取重复的数据将其删除并保留最新一条

    有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除. 1.ROW_NUMBER函数 假设我们有如下数据表: 此时 ...

  5. 使用Docker编译安装运行Doris

    一.编译源码 (1)拉取编译镜像docker pull apache/incubator-doris:build-env-1.2 (2)Mac电脑上拉取源码git clone https://gith ...

  6. dart 数组去重

    List list = ['1','2','3','3']; list = list.toSet().toList();

  7. 『Python底层原理』--Python对象系统探秘

    Python是一种非常灵活的编程语言,它的灵活性很大程度上来自于它的对象系统. 在Python中,一切都是对象,这意味着无论是数字.字符串,还是我们自己定义的类的实例,它们在底层都遵循相同的规则. 本 ...

  8. Thymeleaf 嵌套循环

    <label th:each="role:${roles}" class="check-box"> <input th:each=" ...

  9. pnpm 安装和使用

    1. 简介 Fast, disk space efficient package manager: Fast. Up to 2x faster than the alternatives (see b ...

  10. .NET周刊【2月第4期 2025-02-23】

    国内文章 [翻译] 为什么 Tracebit 用 C# 开发 https://www.cnblogs.com/liuliu-66/p/-/why-tracebit-is-written-in-c-sh ...