01 2022 档案

摘要:前言 最近研究下redis源码,现在从最基本的命令行操作来分析,redis是如何处理命令操作的 1. redis的set命令操作 我们在redis-cli执行下面的命令 set c c debug 发现 t_string.c ,执行了 void setCommand(client *c) 其中 cl 阅读全文
posted @ 2022-01-28 12:23 tomj2ee 阅读(5388) 评论(0) 推荐(0) 编辑
摘要:前言篇: 为了节约成本,决定通过自研来改造rocketmq,添加任意时间延迟的延时队列,开源版本的rocketmq只有支持18个等级的延迟时间, 其实对于大部分的功能是够用了的,但是以前的项目,全部都是使用了阿里云的rocketmq,原因是不同的供应商的订单的延时时间是不同的 (部分供应商的订单未支 阅读全文
posted @ 2022-01-18 10:12 tomj2ee 阅读(2327) 评论(4) 推荐(2) 编辑
摘要:rocketmq开源版本支持18个等级的延迟方案, 如果要支持任意时间延时, 可以基于rocketmq已有的level来改造,传入一个时间,计算出最接近的等级,投递出去,当消息到达时候, 判断是否到了时间,如果没有,继续计算出最接近的等级投递,一直到超时时间为止 这个方案有个缺陷,在没有到达超时时间 阅读全文
posted @ 2022-01-17 20:26 tomj2ee 阅读(319) 评论(0) 推荐(0) 编辑
摘要:时间轮和秒级文件实现原理图 这种方案比较简单实现,通过秒级时间,建立对应的文件夹,只要相同的时间超时的消息,就在同一个目录,通过msgid保证文件不重复,等到了时间后,就扫描对应的文件夹的文件,发送到队列中,写入commitlog即可。 当然了,我们可以先缓冲一定时间的文件夹文件,这样效率高一些。 阅读全文
posted @ 2022-01-17 20:24 tomj2ee 阅读(770) 评论(0) 推荐(0) 编辑
摘要:上图是通过RocketMQ源码分析一个实现原理方案示意图。 分为两个部分: 消息的写入消息的Schedule 在写入CommitLog之前,如果是延迟消息,按照每10分钟写入delayfile文件,对于快到时间执行的,直接写入时间轮,并且写入delayfile,时间轮每秒钟执行,如果时间到了,就执行 阅读全文
posted @ 2022-01-17 20:14 tomj2ee 阅读(1414) 评论(0) 推荐(0) 编辑
摘要:简单的来说,就是rocketmq发送消息到broker的时候,判断是否定时消息, 如果是定时消息,将消息发送到代理服务(这个是一个独立的服务,需要自己开发,定时地把消息发送出去), 当然了消息用什么来保存呢?可以是数据库,redis等等,不过我推荐采用文件,因为消息可能会比较多,需要保存一定的时间, 阅读全文
posted @ 2022-01-17 20:12 tomj2ee 阅读(248) 评论(0) 推荐(0) 编辑
摘要:1 启动消费者等待传入的订阅消息 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurre 阅读全文
posted @ 2022-01-17 20:09 tomj2ee 阅读(1552) 评论(0) 推荐(0) 编辑
摘要:1 基本样例 在基本样例中我们提供如下的功能场景: 使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。 使用RocketMQ来消费接收到的消息。 1.1 加入依赖: maven: <dependency> <groupId>or 阅读全文
posted @ 2022-01-17 20:07 tomj2ee 阅读(127) 评论(0) 推荐(0) 编辑
摘要:开源版本中,只有RocketMQ支持延迟消息,且只支持18个特定级别的延迟 付费版本中,阿里云和腾讯云上的MQ产品都支持精度为秒级别的延迟消息 定时消息:Producer将消息发送到消息队列RocketMQ版服务端,但并不期望立马投递这条消息,而是推迟到在当前时间点之后的某一个时间投递到Consum 阅读全文
posted @ 2022-01-06 20:16 tomj2ee 阅读(5537) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示