摘要: 消息消费概述 消息消费以组的模式开展,一个消费组内可以包含多个消费者,每一个消费者组可订阅多个主题,消费组之间有集群模式和广播模式两种消费模式。 集群模式,主题下的同一条消息只允许被其中一个消费者消费。 广播模式,主题下的同一条消息,将被集群内的所有消费者消费一次。消息服务器与消费者之间的消息传递也 阅读全文
posted @ 2021-04-04 00:09 Anlai_Wei 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 消息存储核心类 private final MessageStoreConfig messageStoreConfig; //消息配置属性 private final CommitLog commitLog; //CommitLog文件存储的实现类 private final ConcurrentM 阅读全文
posted @ 2021-04-03 22:47 Anlai_Wei 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者。 方法和属性 主要方法介绍 //创建主题 void createTopic(final String key, final String newTopic, final int queueNu 阅读全文
posted @ 2021-04-03 16:22 Anlai_Wei 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 架构设计 消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer)发送某一个主题到消息服务器,消息服务器负责将消息持久化存储,消息消费者(Consumer)订阅该兴趣的主题,消息服务器根据订阅信息(路由信息)将消息推送到消费者(Push模式)或者消费者主动向消息服务器拉取(P 阅读全文
posted @ 2021-04-03 14:01 Anlai_Wei 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 源码拉取 从官方仓库 https://github.com/apache/rocketmq clone 或者 download 源码。 源码目录结构: broker: broker 模块(broke 启动进程) client :消息客户端,包含消息生产者、消息消费者相关类 common :公共包 d 阅读全文
posted @ 2021-04-03 10:44 Anlai_Wei 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 消息队列 RocketMQ 消费者在接收到消息以后,有必要根据业务上的唯一 Key 对消息做幂等处理的必要性。 消费幂等的必要性 在互联网应用中,尤其在网络不稳定的情况下,消息队列 RocketMQ 的消息有可能会出现重复,这个重复简单可以概括为以下情况: 发送时消息重复 当一条消息已被成功发送到服 阅读全文
posted @ 2021-04-02 23:53 Anlai_Wei 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 当一条消息初次消费失败,消息队列 RocketMQ 会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列 RocketMQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中 在消息队列 RocketMQ 中,这种正常情况下无法 阅读全文
posted @ 2021-04-02 23:44 Anlai_Wei 阅读(591) 评论(0) 推荐(0) 编辑
摘要: 顺序消息的重试 对于顺序消息,当消费者消费消息失败后,消息队列 RocketMQ 会自动不断进行消息重试(每次间隔时间为 1 秒),这时,应用会出现消息消费被阻塞的情况。因此,在使用顺序消息时,务必保证应用能够及时监控并处理消费失败的情况,避免阻塞现象的发生。 无序消息的重试 对于无序消息(普通、定 阅读全文
posted @ 2021-04-02 23:39 Anlai_Wei 阅读(157) 评论(0) 推荐(0) 编辑
摘要: Producer负载均衡 Producer端,每个实例在发消息的时候,默认会轮询所有的message queue发送,以达到让消息平均落在不同的queue上。而由于queue可以散落在不同的broker,所以消息就发送到不同的broker下,如下图: 图中箭头线条上的标号代表顺序,发布方会把第一条消 阅读全文
posted @ 2021-04-02 23:17 Anlai_Wei 阅读(50) 评论(0) 推荐(0) 编辑
摘要: RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。 Master和Slave的区别:在Broker的配置文件中,参数 brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是 Slave,同时brokerRole参数也会说明这个Broker 阅读全文
posted @ 2021-04-02 22:59 Anlai_Wei 阅读(180) 评论(0) 推荐(0) 编辑