说明:rocketmq实现的延时队列只支持特定的延时时间段,1s,5s,10s,...2h,不能支持任意时间段的延时。

具体实现:rocketmq发送延时消息时先把消息按照延迟时间段发送到指定的队列中(rocketmq把每种延迟时间段的消息都存放到同一个队列中)然后通过一个Timer定时器进行轮训这些队列,查看消息是否到期,如果到期就把这个消息发送到指定topic的队列中,这样的好处是同一队列中的消息延时时间是一致的,还有一个好处是这个队列中的消息时按照消息到期时间进行递增排序的,说的简单直白就是队列中消息越靠前的到期时间越早

总结

优点:设计简单,把所有相同延迟时间的消息都先放到一个队列中,定时扫描,可以保证消息消费的有序性

缺点:定时器采用了timer,timer是单线程运行,如果延迟消息数量很大的情况下,可能单线程处理不过来,造成消息到期后也没有发送出去的情况

改进点:可以在每个延迟队列上各采用一个timer,或者使用timer进行扫描,加一个线程池对消息进行处理,这样可以提供效率

链接:https://www.jianshu.com/p/c6a4ede528a8

RocketMQ实现延时队列原理相关推荐

  1. Redisson 延时队列 原理 详解

    花了一天研究了下Redisson 的延时队列,RBlockingQueue ,RDelayedQueue . 网上没一个说清楚的,而且都是说轮询redis的zset,都是错误的! 让我来纠正,如果我有 ...

  2. RabbitMQ延时队列原理讲解

    RabbitMQ延时消息队列 延时队列介绍 延时队列即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费. 那么,为什么需要延迟消费呢?我们来看以下的场景 网上商城下订单后30分钟 ...

  3. 怎么设计一个合适的延时队列?

    [文章来源]https://sourl.cn/pcgvTp 延时队列技术调研 项目背景 延迟队列,它是一种带有延迟功能的消息队列,目前工作中有几处需延时处理的应用场景. 可选技术参考 kafka 考虑 ...

  4. rocketmq 几种队列_这篇进阶必看的RocketMQ,答应我看完好吗?

    RocketMQ 整体架构设计 整体的架构设计主要分为四大部分,分别是:Producer.Consumer.Broker.NameServer. 为了更贴合实际,我画的都是集群部署,像 Broker ...

  5. rocketmq 几种队列_进阶必看的 RocketMQ ,就这篇了

    RocketMQ 整体架构设计 整体的架构设计主要分为四大部分,分别是:Producer.Consumer.Broker.NameServer. 为了更贴合实际,我画的都是集群部署,像 Broker ...

  6. RabbitMQ第二话 -- Springboot基于四种Exchange(Direct、Fanout、Topic、Heders、延时队列)的实现和多虚拟主机下的生产消费者实现

    本文主要分享RabbitMQ exchange类型的功能和使用.RabbitMQ延时队列.一个springboot服务发送消息到多虚拟主机 1.RabbitMQ exchange exchange交换 ...

  7. RabbitMQ 的延时队列和镜像队列原理与实战

    在阿里云栖开发者沙龙PHP技术专场上,掌阅资深后端工程师.掘金小测<Redis深度历险>作者钱文品为大家介绍了RabbitMQ的延时队列和镜像队列的原理与实践,重点比较了RabbitMQ提 ...

  8. Linux环境编程多线程定时器、延时队列以及分布式定时器的现实与原理分析

    Linux环境编程多线程定时器.延时队列以及分布式定时器的现实与原理分析丨线程池丨中间件丨后端开发丨C/C++linux服务器开发 视频讲解如下,点击观看: Linux环境编程多线程定时器.延时队列以 ...

  9. Redis如何实现分布式锁延时队列以及限流应用丨Redis源码原理|跳表|B+树|分布式锁|中间件|主从同步|存储原理

    Redis如何实现分布式锁延时队列以及限流应用 视频讲解如下,点击观看: Redis如何实现分布式锁延时队列以及限流应用丨Redis源码原理|跳表|B+树|分布式锁|中间件|主从同步|存储原理|数据模 ...

最新文章

  1. 产业|MIR睿工业:2018年机器人市场分析报告
  2. 服务发现与配置管理高可用实践
  3. BS版代码生成器 简介
  4. 关于交集(Intersect)和差集(Except)
  5. C语言学习之求∑n!(即求1!+2!+3!+...+20!)
  6. jquery特效(1)—点击展示与隐藏全文
  7. 容器编排技术 -- Kubernetes kubectl edit 命令详解
  8. 安卓下使用GET方式向服务器端提交数据
  9. 在本地进行开发工作置chrome谷歌浏览器解决跨域问题
  10. LeetCode(821)——字符的最短距离(JavaScript)
  11. width:100%与绝对定位同时存在,偏移出父级容器
  12. 【转】JavaScript顶级对象参考模型
  13. 微信公众号发送消息接口(群发接口)
  14. 动态规划-leetcode#213 打家劫环形舍
  15. 时事点评——红芯浏览器事件
  16. 开游戏服务器要选择什么样的?
  17. 医院洁净手术室设计装修要点SICOLAB
  18. 如何搭建App自动化测试框架?
  19. mysql docker oom_记一次 K3s MySQL 启动 OOM 排查
  20. HDU 1695(数论,筛选+素因子分解+容斥)

热门文章

  1. mysql cast报错_在mysql中使用cast函数报错
  2. 2023.02.24(uniapp 问题记录)
  3. java计算机毕业设计流浪动物救助公益平台源代码+数据库+系统+lw文档
  4. 1、Rabbit MQ 介绍与安装
  5. java怎么让图片铺满_Java实现水印铺满图片
  6. python opencv随机位置添加水印图
  7. 几种删除Linux目录的方法
  8. H5页面唤起指定app或跳转到应用市场(扫描二维码直接下载APP)
  9. APP性能测试,你需要关注哪些指标?
  10. 有什么适合做填写的报表工具?