摘要: 一、产生原因 1. 生产消费速率不匹配 生产者速率过快:生产者持续以高吞吐量发送消息,超过消费者处理能力(生产者产生太快) 消费者处理能力不足:消费者处理逻辑复杂、效率低下或资源不足(生产者产生消息太快) 突发流量冲击:业务高峰期或促销活动导致消息量骤增(生产者产生消息太快) 2. 消费者端问题 消 阅读全文
posted @ 2025-07-05 09:55 CyrusHuang 阅读(1) 评论(0) 推荐(0)
摘要: 重复消费场景 1 consumer 返回失败 public enum ConsumeConcurrentlyStatus { CONSUME_SUCCESS, RECONSUME_LATER; } 如果返回 ConsumeConcurrentlyStatus.RECONSUME_LATER,消息就会 阅读全文
posted @ 2025-07-05 09:54 CyrusHuang 阅读(3) 评论(0) 推荐(0)
摘要: RocketMQ 通过 多层级防护机制 防止消息丢失和保证可靠性,需从 生产者、Broker、消费者 三个环节综合配置 Producer 端防护 同步发送 + 同步刷盘/复制 // 同步发送(必须捕获异常) try { SendResult result = producer.send(msg); 阅读全文
posted @ 2025-07-05 09:52 CyrusHuang 阅读(0) 评论(0) 推荐(0)
摘要: 推(Push)模式 特点 由 Broker 主动将消息推送给消费者 实时性较高,消息到达后立即推送给消费者 消费者需要设置监听器(MessageListener)来处理推送过来的消息 实现原理 RocketMQ 的 Push 模式实际上是基于Pull模式的封装,内部实现了一个长轮询机制: 消费者启动 阅读全文
posted @ 2025-07-04 18:19 CyrusHuang 阅读(4) 评论(0) 推荐(0)
摘要: 集群(默认),消息被任一消费者消费即可,消费失败会进行消费重试 广播,Broker 把消息推送给所有订阅了 Topic 的消费者组,如果消费者组是多个,那么消息就会被多次消费,但是消费失败就失败了,不会进行消费重试 两个消费者组 每个组里边两个消费者 订阅了同一个topic。 现在来一条消息 这条消 阅读全文
posted @ 2025-07-04 17:46 CyrusHuang 阅读(1) 评论(0) 推荐(0)
摘要: 生产者 DefaultMQProducer producer = new DefaultMQProducer("retry-producer-group"); producer.setNamesrvAddr("127.0.0.1:9876"); producer.start(); // 发送失败重试 阅读全文
posted @ 2025-07-03 15:41 CyrusHuang 阅读(2) 评论(0) 推荐(0)
摘要: Tag 过滤 发消息时:topic 用来确定队列,tag 不参与队列的选择,tag 会作为消息属性与消息一起存储在队列上 消费消息时:borker 会根据消息的 tag 把消息推送到对应的的消费者 生产者 发送两条消息,一条消息 tag 为 vip1,一条消息 tag 为 vip2 DefaultM 阅读全文
posted @ 2025-07-03 15:39 CyrusHuang 阅读(2) 评论(0) 推荐(0)
摘要: 实现流程 创建生产者 创建一个事务监听器,实现 TransactionListener 接口和下面两个方法 executeLocalTransaction:执行本地事务,也就是要和发送消息同时成功业务处理 checkLocalTransaction:检查本地是服务是否成功 给生产者绑定事务监听器 生 阅读全文
posted @ 2025-07-03 15:36 CyrusHuang 阅读(5) 评论(0) 推荐(0)
摘要: 顺序消息分类 全局顺序 所有消息严格按照发送顺序被消费。 通常只能使用一个队列(单队列),吞吐量受限。 分区顺序 按照某个业务 key(如订单ID、用户ID)发送到 相同的队列,只在该 key 范围内保持顺序。 多个 key 的消息可以并发消费,各自内部有序。 使用示例 Producer 生产者发送 阅读全文
posted @ 2025-07-03 13:46 CyrusHuang 阅读(5) 评论(0) 推荐(0)
摘要: 使用示例 消费者没什么变化,和普通消费者一样,这里就不贴了 DefaultMQProducer producer = new DefaultMQProducer("ms-producer-group"); producer.setNamesrvAddr("127.0.0.1:9876"); prod 阅读全文
posted @ 2025-07-03 11:21 CyrusHuang 阅读(3) 评论(0) 推荐(0)