2.3k 2 分钟

# 启动消费者等待传入订阅消息 12345678910111213141516171819202122232425262728import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;import...
6k 5 分钟

消息有序指的是可以按照消息的发送顺序来消费 ( FIFO )。 RocketMQ 可以严格的保证消息有序,可以分为分区有序或者全局有序。 顺序消费的原理解析:在默认的情况下消息发送会采取 Round Robin 轮询方式把消息发送到不同的 queue (分区队列);而消费消息的时候从多个 queue 上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个 queue 中,消费的时候只从这个 queue 上依次拉取,则就保证了顺序。当发送和消费参与的 queue 只有一个,则是全局有序;如果多个 queue 参与,则为分区有序,即相对每个 queue...
6.1k 6 分钟

首先我们来学习一个简单的消费生产和消费的 demo . # 生产消息 RocketMQ , 给我们提供了三种简单的消息生产方式, 1.同步发送 , 2.异步发送 , 3.直接发送,不关心发送结果 。 这三种方式,分别对应三种不同的应用场景 # 同步发送 这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知。这种发送方式,在发送成功之后,才会返回,否则会一直阻塞,直到抛出异常。 1234567891011121314151617181920212223public class SyncProducer { public static void...
446 1 分钟

上一篇文章中我们成功地搭建了几种 RocketMQ 的部署方式。 这篇文章,我们就来看一下 RocketMQ 所支持的消息类型在 Java 应用中的使用。 # 加入依赖 在上一篇文章中,我们已经使用过 RocketMQ 进行收发消息了。这一篇呢,我从头开始来学习使用 RocketMQ. 首先,引入 Maven 依赖, 12345<dependency> <groupId>org.apache.rocketmq</groupId>...
7.6k 7 分钟

# 搭建 RocketMQ 集群 根据之前的了解,我们已经知道了 RocketMQ 可以单机部署,支持集群部署。 RocketMQ 支持以下集中部署方式 1.单Master模式部署 , 2.多Master模式部署 , 3.多Master多Slaver模式部署 # 单 Master 模式 这种方式风险较大,一旦 Broker 重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。 # 启动 NameServer 123456### 首先启动Name Server$ nohup sh mqnamesrv & ### 验证Name Server 是否启动成功$...
2k 2 分钟

# RocketMQ 概念 我在学习 RocketMQ 的时候,看到文档中介绍了很多的概念。我非常反感,但是又没有办法,没有这些概念,就没办法更好的去学习后面的内容,当后面使用很多名词来梳理实现原理的时候,就会一头雾水。 上一篇文章中,我们知道了 RocketMQ 由四部分构成。 # 消息模型 Producer 负责生产消息, Consumer 负责消费消息, Broker 负责存储消息, NameServer 负责对 Producer 和 Customer 的服务发现,还有路由这两个功能。 Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个 Topic...
1.8k 2 分钟

# RocketMQ 介绍 截止 2021 年 9 月 1 日, RocketMQ 最新版本是 4.9.1 。 最新 Star 数为 1.5w . fork 数量是 8.4k . # 发展历程 RocketMQ 的发展历程分为两部分, 2001 年开始 RocketMQ 的前身 Notify ,在 2016 年阿里将 RocketMQ 捐赠给 Apache 基金会中进行孵化。 # 在阿里 阿里巴巴消息中间件起源于 2001 年的五彩石项目, Notify 在这期间应运而生,用于交易核心消息的流转。 至 2010 年, B2B 开始大规模使用 ActiveMQ...
740 1 分钟

# 开篇 写这篇文章的时间是 2021 年 9 月 1 日,不知道是否有勇气写完全部系列之后再发布给大家,这只能算是自己学习 RocketMQ 的笔记吧。希望在 2021 年的年底能够将整个系列完整的发布到方家小白公众号和 fangjiaxiaobai.github.io 博客中。想写的文章也还有很多,同时在写的有 《Java 的 Stream 并行流设计》 和 《聊聊面试那点事》。 2021 年国家发布了很多政策,尤其是互联网行业,特别是 在线教育,我前些日子里也是一名在线教育从业者。 而写这个系列的最根本的原因,也是因为被人常问的就是 RocketMQ...
1.5k 1 分钟

# 基本思想 每次都操作两个相邻的数据。每次冒泡操作都对相邻的两个数据进行比较,看是否满足大小关系要求,如果不满足,就进行互换。每次冒泡都会冒出一个最小 / 大值,并移动到它应该在的位置。重复 n 次,就完成了对 n 个数据的排序工作. # 排序逻辑图 这里在详细的写一下第一次排序的过程: 按照以上逻辑的代码实现 # 算法实现 1234567891011121314int *bubble_sort(int *a, int length) { for (int i = 0; i < length; i++) { for (int j = 1;...
1k 1 分钟

# 排序思想 把将要排序的数据分到几个有序的桶里,每个同理的数据再单独进行排序,桶内拍完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了. # 排序实现逻辑 💔内容太饿了,离家出走了… # 桶排序算法实现 💔内容太饿了,离家出走了… # 算法评估 桶排序的时间复杂度为: O(n)O(n)O(n) 桶排序不是稳定的排序算法 # 时间复杂度分析 如果要排序的数据有 n 个,我们把它们均匀的分到 m 个桶内,每个桶里就有 k=n/m 个元素,每个桶内部使用快速排序,时间复杂度为 O(k∗logk)O(k*logk)O(k∗logk)。 m 个桶排序的时间复杂度就是...