1.4K Star 13.3K Fork 3.1K

Lilishop开源商城系统 / lilishop商城 电商 java商城系统

 / 详情

延迟队列的实现有点鸡肋,没必要即用了redis又用rocketmq。

已验收
缺陷
创建于  
2022-05-26 17:03

目前的顺序是这样的:生产者 -> redis队列 -> rocketmq -> 消费者。

分析:这样不仅增大了消息的传输成本,也增大了系统的复杂性(需要增加很多额外的操作来保证redis队列删除元素和发送消息到rocketmq这两步操作都成功)。

既然开源版的rocketmq提供的延迟消息时间不能满足系统的需求,完全可以采用其他方式来实现。

建议优化成:

生产者 -> redis队列 -> 消费者

评论 (3)

@xiaochangbai 创建了缺陷

rocketmq的延时任务貌似只有级别,没有固定18秒执行,16分30秒执行这种配置吧。。。

1、部分历史遗留问题,最初代码结构延时任务消费是在每个项目中的,而不是在consumer项目中,基于业务独立,consumer的代码不可能被其他业务调用所以需要发送mq到消费者执行。

2、基于现有的结构,期望的是把延时任务的调度和延时任务的执行。
考虑到分布式部署,多节点运行时:延时任务执行时间不可控,在代码中是新建线程去执行任务的,如果某一节点的线程消费大量延时任务,那么可能出现一个节点已经OOM,其他服务器没消息可以消费。交付mq去控制节点轮询,消息顺序消费,不会有内存资源问题,比通过我们现有的线程直接调用更合理一些。在这种情况下,消费延时任务的线程只是负责给mq发送一条消息,就会快速释放掉线程资源,而具体的业务的消费也不会耽搁。

类似的架构还有定时任务,xxljob也是发送一个mq而不是直接执行,也是同样的道理,如果将来替换xxljob为其他调度机制,不会改变除了任务调度之外的任何代码。

目前这个暂时不考虑优化成描绘的样子,您的想法很棒,可以照那个样子去优化。

Bulbasaur 任务状态待办的 修改为已验收

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
4904154 xiaochangbai 1656836733 701277 chopper711 1679448410
Java
1
https://gitee.com/beijing_hongye_huicheng/lilishop.git
git@gitee.com:beijing_hongye_huicheng/lilishop.git
beijing_hongye_huicheng
lilishop
lilishop商城 电商 java商城系统

搜索帮助