专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

扩展RocketMQ 使其支持任意时间精度的消息延迟

前言

本想使用rocketmq的延迟消息特性,但延迟的范围有限,仅支持
1s 5s 10s 30s 
1m 2m 3m 4m 
5m 6m 7m 8m 
9m 10m 20m 30m
1h 2h
这18个等级,之外的延迟时间不支持,本文是为了说明如何利用rocketmq的延迟消息实现任意时间的消息延迟,如何进行扩展的

技术架构

70_1.png

rocketmq部署

下载安装包

https://mirror.bit.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip
 解压到目录 
 /Users/mengfanxiao/Documents/third_software/mq/rocketmq/rocketmq-all-4.7.0-bin-release

配置Java_home环境变量

sudo vim /etc/profile
jdk1.8安装报路径: /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
 添加 
 JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home"
export JAVA_HOME
CLASS_PATH="$JAVA_HOME/lib" 

安装nameserver

启动 mqnamesrv

sh bin/mqnamesrv

70_2.png

安装broker


sh bin/mqbroker -n 127.0.0.1:9876 autoCreateTopicEnable=true -c /Users/mengfanxiao/Documents/third_software/mq/rocketmq/rocketmq-all-4.7.0-bin-release/conf/broker.conf

70_3.png

安装console

下载 rocketmq 插件

  • 代码下载
https://gitee.com/pingfanrenbiji/rocketmq-externals.git

  • 修改配置
vim rocketmq-externals/rocketmq-console/src/main/resources/application.properties 

70_4.png

  • 代码编译
进入‘\rocketmq-externals\rocketmq-console’文件夹,执行‘mvn clean package -Dmaven.test.skip=true’,编译生成

  • 启动
编译成功之后,Cmd进入‘target’文件夹,执行‘java -jar rocketmq-console-ng-1.0.1.jar’,启动‘rocketmq-console-ng-1.0.0.jar’。

  • 访问控制台页面

70_5.png

吐槽下:页面和rabbitmq相比弱爆了

代码

producer

producer配置

70_6.png

producer 延迟消息生产流程解析

70_7.png70_8.png

延迟发送逻辑
  • 根据延迟时间和当前时间差值计算延迟等级
Integer level = DelayLevelCalculate.calculateDefault(l);

70_9.png

  • 标记该消息为延迟消息 希望该消息被消费的时候 若发现是延迟消息即还未到消费的时间 则不消费 再次的触发生产者生产一次该消息
fillMessage(msg, level, startSendTime);

70_10.png

consumer

consumer配置

70_11.png70_12.png

consumer 延迟消息消费流程解析

70_13.png 消息消费逻辑

若发现是延迟消息即还未到消费的时间 则不消费 再次的触发生产者生产一次该消息

参考代码

https://gitee.com/pingfanrenbiji/civism-rocket.git

参考文献

https://www.jianshu.com/p/4f968cd96b87

本文使用 tech.souyunku.com 排版

文章永久链接:https://tech.souyunku.com/31990

未经允许不得转载:搜云库技术团队 » 扩展RocketMQ 使其支持任意时间精度的消息延迟

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们