延迟队列

Rabbitmq并没有延迟队列

但是:死信队列+消息时间设置过期时间可以 达成我们想要的延迟队列效果

例如下单5分钟之内未支付就会取消订单,那么设置下单支付时间为5分钟后过期然后进入死信队列,一旦进入死信队列那么就自动取消订单

代码
消费者:

@Component
public class ttlproducer {@Autowiredprivate RabbitTemplate rabbitTemplate;//  模拟订单public void makeTest(String a,String b){String ExchangeName = "ttl.direct.Exchange";String luYouKey = "ttl";String message = UUID.randomUUID().toString();System.out.println("订单生成----"+message);rabbitTemplate.convertAndSend(ExchangeName,luYouKey,message);}
}

创建死信队列
这个死信队列 专门存放未支付订单的消息

@Configuration
public class dlxconsumer {@Beanpublic DirectExchange deadExchange(){return new DirectExchange("dlx.direct.Exchange");}@Beanpublic Queue abcdQueue(){return new Queue("si.xin.Queue");}@Beanpublic Binding abcdBinding(){return BindingBuilder.bind(abcdQueue()).to(deadExchange()).with("dead");}
}

创建订单过期时间

@Configuration
public class ttlconsumer {@Beanpublic DirectExchange directExchange(){return new DirectExchange("ttl.direct.Exchange",true,false);}@Beanpublic Queue abcQueue(){HashMap<String, Object> args = new HashMap<>();args.put("x-message-ttl",5000);//5秒args.put("x-dead-letter-exchange","dlx.direct.Exchange");args.put("x-dead-letter-routing-key","dead");return new Queue("ding.dan.Queue",true,false,false,args);}@Beanpublic Binding abcBinding(){return BindingBuilder.bind(abcQueue()).to(directExchange()).with("ttl");}
}

测试

@SpringBootTest
class SpringBootRabbitmqSixingduilieApplicationTests {@Autowiredprivate ttlproducer ttlproducer;@Testvoid contextLoads() {ttlproducer.makeTest("下单","...");}
}


我们可以去web界面看
订单超时时间设置的是5秒过期时间
看看我们过期的消息是否进入到死信队列

其实上面的死信队列已经起到了延迟队列的作用
5秒内如果消费不了就会转投到死信队列里

rabbitmq延迟队列实现相关推荐

  1. RabbitMQ 延迟队列实现定时任务的正确姿势,你学会了么?

    以下文章来源方志朋的博客,回复"666"获面试宝典 场景 开发中经常需要用到定时任务,对于商城来说,定时任务尤其多,比如优惠券定时过期.订单定时关闭.微信支付2小时未支付关闭订单等 ...

  2. rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列

    延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行. DLX + TTL 方式存在的时序问题 对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有 ...

  3. Delayed Message 插件实现 RabbitMQ 延迟队列

    延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行. DLX + TTL 方式存在的时序问题 对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有 ...

  4. RabbitMQ 延迟队列-对于入门来说可以快速上手

    RabbitMQ 延迟队列-非常非常实用 RabbitMQ 延迟队列-非常非常实用 一.使用场景 二.消息延迟推送的实现 三.项目具体实现 RabbitMQ 延迟队列-非常非常实用 一.使用场景 ​ ...

  5. 谷粒商城笔记+踩坑(22)——库存自动解锁。RabbitMQ延迟队列

    导航: 谷粒商城笔记+踩坑汇总篇 目录 1 业务流程,订单失败后自动回滚解锁库存 可靠消息+最终一致性方案 2[仓库服务]RabbitMQ环境准备 2.1 导入依赖 2.2 yml配置RabbitMQ ...

  6. RabbitMQ 延迟队列,太实用了!

    点击关注公众号,Java干货及时送达 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付 ...

  7. RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)

    应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...

  8. C#实现rabbitmq 延迟队列功能

    最近在研究rabbitmq,项目中有这样一个场景:在用户要支付订单的时候,如果超过30分钟未支付,会把订单关掉.当然我们可以做一个定时任务,每个一段时间来扫描未支付的订单,如果该订单超过支付时间就关闭 ...

  9. SpringBoot RabbitMQ 延迟队列代码实现

    场景 用户下单后,如果30min未支付,则删除该订单,这时候就要可以用延迟队列 准备 利用rabbitmq_delayed_message_exchange插件: 首先下载该插件:https://ww ...

  10. RabbitMQ —— 延迟队列

    RabbitMQ实现延迟队列一:在队列上设置TTL Publish --> delaysync.exchange --> delay.5m.queue(延迟队列) --> delay ...

最新文章

  1. 在Mac终端下使用conda命令提示未找到命令conda
  2. python 学习
  3. Dubbo下一站:Apache顶级项目
  4. HTTP|Qt实践-Qt编写某平台刷评论软件(含代码与思路)
  5. 需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
  6. python 百度ai json解析_百度AI识别调用的简单例子
  7. 闪迪内存卡软件测试,闪迪存储卡怎么样
  8. 使用FireBird数据库基本知识
  9. 【GNSS】GREAT多频多系统GREAT-UPD开源代码-第一章 介绍
  10. java mac算法_Mac算法的java实现
  11. cleander日期转换
  12. 12C新特性--Application Continuity
  13. 设计一个一元稀疏多项式简单计算器
  14. ABB机器人基础培训资料整理与总结
  15. Per tile sequence quality
  16. Eclipse ST-Link设置方法
  17. SQL常用基础语句(SQL常用增删改查语句及案例)
  18. optimizer.zero_grad()意义
  19. 卷积神经网络——卷积层、池化层意义
  20. jta mysql_springboot + jta + mysql + mongo 分布式(多种数据源)事务

热门文章

  1. oracle 复制组删除,利用copy在ASM磁盘组之间迁移
  2. 错误 No package ‘vulkan‘ found 解决办法
  3. 力扣:13罗马数字转整数(python)
  4. 阿里开源:思考,演进和发展
  5. Azkaban的Web Server源码探究系列20:resolvebuildFlow
  6. IE无法安装Activex控件
  7. linux 下转换UTC到本地时间
  8. php __tostring 与 tostring
  9. 遗传算法求解背包问题
  10. Selenium + WebDriver 各浏览器驱动下载地址