RabbitMQ延时消息队列

延时队列介绍

延时队列即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费。

那么,为什么需要延迟消费呢?我们来看以下的场景

网上商城下订单后30分钟后没有完成支付,取消订单(如:淘宝、去哪儿网)系统创建了预约之后,需要在预约时间到达前一小时提醒被预约的双方参会系统中的业务失败之后,需要重试这些场景都非常常见,我们可以思考,比如第二个需求,系统创建了预约之后,需要在预约时间到达前一小时提醒被预约的双方参会。那么一天之中肯定是会有很多个预约的,时间也是不一定的,假设现在有1点 2点 3点 三个预约,如何让系统知道在当前时间等于0点 1点 2点给用户发送信息呢,是不是需要一个轮询,一直去查看所有的预约,比对当前的系统时间和预约提前一小时的时间是否相等呢?这样做非常浪费资源而且轮询的时间间隔不好控制。如果我们使用延时消息队列呢,我们在创建时把需要通知的预约放入消息中间件中,并且设置该消息的过期时间,等过期时间到达时再取出消费即可。

Rabbitmq实现延时队列一般而言有两种形式:第一种方式:利用两个特性: Time To Live(TTL)、Dead Letter Exchanges(DLX)[A队列过期->转发给B队列]

第二种方式:利用rabbitmq中的插件x-delay-message

TTL DLX实现延时队列

TTL DLX介绍

TTL

RabbitMQ可以针对队列设置x-expires(则队列中所有的消息都有相同的过期时间)或者针对Message设置x-message-ttl(对消息进行单独设置,每条消息TTL可以不同),来控制消息的生存时间,如果超时(两者同时设置以最先到期的时间为准),则消息变为dead letter(死信)

Dead Letter Exchanges(DLX)RabbitMQ的Queue可以配置x-dead-letter-exchange和x-dead-letter-routing-key(可选)两个参数,如果队列内出现了dead letter,则按照这两个参数重新路由转发到指定的队列。x-dead-letter-exchange:出现dead letter之后将dead letter重新发送到指定exchange

x-dead-letter-routing-key:出现dead letter之后将dead letter重新按照指定的routing-key发送

RabbitMQ延时队列原理讲解相关推荐

  1. docker安装rabbitmq延时队列插件

    docker安装rabbitMQ延时队列插件(delayed_message_exchange) 1. 查找Docker容器中的RabbitMQ镜像 docker ps -a [root@linux ...

  2. RabbitMQ镜像队列原理分析

    对于RabbitMQ的节点来说,有单节点模式和集群模式两种,其中集群模式又分为普通集群模式和镜像队列集群模式,在<RabbitMQ集群架构搭建与高可用性实现>文中,介绍了RabbitMQ的 ...

  3. Springcloud集成 RabbitMQ延时队列

    一.场景 当涉及到需要延时处理的业务,比如订单30分钟后过期,2小时后操作业务数据等操作,这里选择用MQ的延时队列+插件来处理,本文记录具体代码实现供参考. 二.代码配置 统一集成在common包中, ...

  4. java实现rabbitMQ延时队列详解以及spring-rabbit整合教程

    在实际的业务中我们会遇见生产者产生的消息,不立即消费,而是延时一段时间在消费.RabbitMQ本身没有直接支持延迟队列功能,但是我们可以根据其特性Per-Queue Message TTL和 Dead ...

  5. 详解SpringCloud中RabbitMQ消息队列原理及配置,一篇就够!

    作者:kosamino cnblogs.com/jing99/p/11679426.html 一.MQ用途 1.同步变异步消息 场景:用户下单完成后,发送邮件和短信通知. 运用消息队列之后,用户下单完 ...

  6. RabbitMQ延时队列

    1.检查是否安装延时插件 : rabbitmq_delayed_message_exchange rabbitmq-plugins list 若没有就去下载 https://www.rabbitmq. ...

  7. Redisson 延时队列 原理 详解

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

  8. RocketMQ实现延时队列原理

    说明:rocketmq实现的延时队列只支持特定的延时时间段,1s,5s,10s,...2h,不能支持任意时间段的延时. 具体实现:rocketmq发送延时消息时先把消息按照延迟时间段发送到指定的队列中 ...

  9. 什么是延时电路?6种延时电路原理讲解

    众所周知,说到延时,很多人都会想到用软件件来实现,比如定时器之类的.今天就来说说用硬件来实现定时的方式,虽说没有那么准,但是有些场合还是用得到的.今天我们来介绍一下6种延时电路工作原理. 1. 精确长 ...

最新文章

  1. Java项目:旅游网站管理系统设计和实现(java+springboot+jsp+mysql+spring)
  2. nChain再获数字货币安全专利,助力BCH更加安全可靠
  3. mybatis 分页需要的jar包下载_064、MyBatis
  4. [开发笔记]-页面切图、CSS前端设计、JS
  5. 每日程序C语言29-将数组逆序输出
  6. 微服务(一) --- 架构与选型
  7. python爬取视频自动播放_如何在IPython笔记本上自动播放声音?
  8. docker ubuntu16.04镜像下安装cowrie蜜罐记录
  9. Docker(二十三)-Docker使用pipework配置本地网络
  10. 送给即将春秋招的同学--一名服务端开发工程师的校招面经总结
  11. Adjoin the Networks
  12. 什么是云计算云计算能干什么?云计算学习笔记工具素材
  13. 【uniapp】 两种上拉加载方式
  14. 4399知名游戏-赛尔号图鉴的爬取
  15. 2356,2372,2377,2388,2394
  16. python自动推送消息_使用Python制作自动推送微信消息提醒的备忘录功能
  17. 开源电商Sylius如何执行自动化测试
  18. 【时间序列】ARMA 时序模型形式、理解、统计特性
  19. BUUCTF刷题——metasequoia_2020_samsara
  20. Spring的依赖注入方法

热门文章

  1. 从零开始——电子商务平台01
  2. Win10 Bash/WSL调试Linux环境下的.NET Core应用程序
  3. 阅读笔记 1 火球 UML大战需求分析
  4. 我理解的Hanlder--android消息传递机制
  5. sql语句转化为分页查询的一种实现
  6. spark基准测试-BigDataBenchs
  7. MVC把表格导出到Excel
  8. jumpserver 堡垒机环境搭建(图文详解)
  9. 摘: cmd环境 使用一点知识
  10. 显卡A卡和N卡有什么区别