rabbitmq延迟队列实现
延迟队列
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延迟队列实现相关推荐
- RabbitMQ 延迟队列实现定时任务的正确姿势,你学会了么?
以下文章来源方志朋的博客,回复"666"获面试宝典 场景 开发中经常需要用到定时任务,对于商城来说,定时任务尤其多,比如优惠券定时过期.订单定时关闭.微信支付2小时未支付关闭订单等 ...
- rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列
延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行. DLX + TTL 方式存在的时序问题 对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有 ...
- Delayed Message 插件实现 RabbitMQ 延迟队列
延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行. DLX + TTL 方式存在的时序问题 对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有 ...
- RabbitMQ 延迟队列-对于入门来说可以快速上手
RabbitMQ 延迟队列-非常非常实用 RabbitMQ 延迟队列-非常非常实用 一.使用场景 二.消息延迟推送的实现 三.项目具体实现 RabbitMQ 延迟队列-非常非常实用 一.使用场景 ...
- 谷粒商城笔记+踩坑(22)——库存自动解锁。RabbitMQ延迟队列
导航: 谷粒商城笔记+踩坑汇总篇 目录 1 业务流程,订单失败后自动回滚解锁库存 可靠消息+最终一致性方案 2[仓库服务]RabbitMQ环境准备 2.1 导入依赖 2.2 yml配置RabbitMQ ...
- RabbitMQ 延迟队列,太实用了!
点击关注公众号,Java干货及时送达 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付 ...
- RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)
应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...
- C#实现rabbitmq 延迟队列功能
最近在研究rabbitmq,项目中有这样一个场景:在用户要支付订单的时候,如果超过30分钟未支付,会把订单关掉.当然我们可以做一个定时任务,每个一段时间来扫描未支付的订单,如果该订单超过支付时间就关闭 ...
- SpringBoot RabbitMQ 延迟队列代码实现
场景 用户下单后,如果30min未支付,则删除该订单,这时候就要可以用延迟队列 准备 利用rabbitmq_delayed_message_exchange插件: 首先下载该插件:https://ww ...
- RabbitMQ —— 延迟队列
RabbitMQ实现延迟队列一:在队列上设置TTL Publish --> delaysync.exchange --> delay.5m.queue(延迟队列) --> delay ...
最新文章
- 在Mac终端下使用conda命令提示未找到命令conda
- python 学习
- Dubbo下一站:Apache顶级项目
- HTTP|Qt实践-Qt编写某平台刷评论软件(含代码与思路)
- 需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
- python 百度ai json解析_百度AI识别调用的简单例子
- 闪迪内存卡软件测试,闪迪存储卡怎么样
- 使用FireBird数据库基本知识
- 【GNSS】GREAT多频多系统GREAT-UPD开源代码-第一章 介绍
- java mac算法_Mac算法的java实现
- cleander日期转换
- 12C新特性--Application Continuity
- 设计一个一元稀疏多项式简单计算器
- ABB机器人基础培训资料整理与总结
- Per tile sequence quality
- Eclipse ST-Link设置方法
- SQL常用基础语句(SQL常用增删改查语句及案例)
- optimizer.zero_grad()意义
- 卷积神经网络——卷积层、池化层意义
- jta mysql_springboot + jta + mysql + mongo 分布式(多种数据源)事务
热门文章
- oracle 复制组删除,利用copy在ASM磁盘组之间迁移
- 错误 No package ‘vulkan‘ found 解决办法
- 力扣:13罗马数字转整数(python)
- 阿里开源:思考,演进和发展
- Azkaban的Web Server源码探究系列20:resolvebuildFlow
- IE无法安装Activex控件
- linux 下转换UTC到本地时间
- php __tostring 与 tostring
- 遗传算法求解背包问题
- Selenium + WebDriver 各浏览器驱动下载地址