C# RabbitMQ延迟队列功能实战项目演练

一、需求背景

当用户在商城上进行下单支付,我们假设如果8小时没有进行支付,那么就后台自动对该笔交易的状态修改为订单关闭取消,同时给用户发送一份邮件提醒。那么我们应用程序如何实现这样的需求场景呢?在之前的《C# Redis缓存过期实现延迟通知实战演练》分享课程中阿笨最后总结的时候说过Redis Pub/Sub是一种并不可靠地消息机制,他不会做信息的存储,只是在线转发,那么肯定也没有ack确认机制,另外只有订阅段监听时才会转发!我们是否有更好的方式去实现呢?今天给大家分享的比较好的解决方案就是通过RabbitMQ的TTL(time to live)和DLX(Dead-Letter-Exchange)来实现延迟任务。

1.1、本次分享课程适合人群如下:

1、有一定的NET开发基础并对RabbitMQ技术有一定了解和认识。

2、喜欢阿笨的干货分享课程的童鞋们。

1.2、一句话总结今天我们要学习的目标和成果?

C#如何通过RabbitMQ如何实现延迟队列功能。

如果您对本次《C#RabbitMQ延迟队列功能实战项目演练》分享课程感兴趣的话,那么请跟着阿笨一起学习吧。

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。

二、场景介绍

2.1、什么是延迟队列?

2.2、使用RabbitMQ实现延迟任务应用场景

三、思路讲解

3.1、实现思路

3.2、实现方案

四、实现步骤

1)、基于队列方式实现延迟队列(消息队列中所有消息的过期TTL一样)

2)、基于消息方式实现延迟队列(消息队列中单个消息的过期TTL不一样)

五、课后思考与总结

原文地址:https://www.cnblogs.com/51net/p/10410367.html

时间: 2024-11-08 04:20:24

C# RabbitMQ延迟队列功能实战项目演练的相关文章

C#实现rabbitmq 延迟队列功能

最近在研究rabbitmq,项目中有这样一个场景:在用户要支付订单的时候,如果超过30分钟未支付,会把订单关掉.当然我们可以做一个定时任务,每个一段时间来扫描未支付的订单,如果该订单超过支付时间就关闭,但是在数据量小的时候并没有什么大的问题,但是数据量一大轮训数据库的方式就会变得特别耗资源.当面对千万级.上亿级数据量时,本身写入的IO就比较高,导致长时间查询或者根本就查不出来,更别说分库分表以后了.除此之外,还有优先级队列,基于优先级队列的JDK延迟队列,时间轮等方式.但如果系统的架构中本身就有

实现rabbitmq 延迟队列功能

最近在研究rabbitmq,项目中有这样一个场景:在用户要支付订单的时候,如果超过30分钟未支付,会把订单关掉.当然我们可以做一个定时任务,每个一段时间来扫描未支付的订单,如果该订单超过支付时间就关闭,但是在数据量小的时候并没有什么大的问题,但是数据量一大轮训数据库的方式就会变得特别耗资源.当面对千万级.上亿级数据量时,本身写入的IO就比较高,导致长时间查询或者根本就查不出来,更别说分库分表以后了.除此之外,还有优先级队列,基于优先级队列的JDK延迟队列,时间轮等方式.但如果系统的架构中本身就有

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来. 阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接灵活的运用到自己的实际项目中去.

WinForm多语言版本实战项目演练

一.课程介绍 关于如何实现"WinForm多语言版本"网上有很多实现技术方案,可以说是"琳琅满目","包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这种开发需求,但是为了一个自上手简单.维护方便.扩展性强的WinForm多语言版本技术方案而感到烦恼的话,那么很高兴恭喜你看到了阿笨的本次分享课程:阿笨结合的是自己在实际工作中遇到真实项目案例,特别的总结并且分享出来给大家,从而避免重复造轮子这种事情. 如果您对本次分享&

C# WebApi+Task+WebSocket实战项目演练(四)

一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第四部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和完善此系列课程!本高级系列课程适合人群如下: 1.有一定的NET开发基础并对WebApi.Task.WebSocket技术有一定了解和认识. 2.喜欢阿笨的干货分享课程的童鞋们. 希望大家在选择阿笨的 C#高级编程实战技能开发宝典课程系列的时候,根据自身的情况进行选择,由于本次课程不是零基础教学课程系列,所

WinForm企业级框架实战项目演练

一.课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类.这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合.一位伟大的讲师曾经说过一句话:事物存在即合理!录制这堂课程的目的就是专门给想学习和了解WinForm应用程序的童鞋们.虽然当前主流的架构开发的确大多是WEB端和App移动端开发,可能大家都忽略了传统的WinForm桌面应用程序开发的魅力! 如果您对本次分享< WinForm企业级框架实战项目演练 >课程感兴趣的话,那么请跟着阿笨一起玩WinForm吧!阿笨将从自

C#模板引擎NVelocity实战项目演练

一.背景需求 很多人在做邮件模板.短信模板的时候,都是使用特殊标识的字符串进行占位,然后在后台代码中进行Replace字符串,如果遇到表格形式的内容,则需要在后台进行遍历数据集合,进行字符串的拼接,继而Replace模板中的占位符 !今天给大家分享一个WinForm方面的模板引擎的小技巧和小技能吧,本次课程阿笨给大家分享关于WinForm开发中如何通过模板引擎NVelocity根据动态数据生成漂亮的订单详细查看页面? 1.1.本次分享课程包含知识点如下: 1).WinForm中WebBrowse

Spring Boot(十四)RabbitMQ延迟队列

一.前言 延迟队列的使用场景:1.未按时支付的订单,30分钟过期之后取消订单:2.给活跃度比较低的用户间隔N天之后推送消息,提高活跃度:3.过1分钟给新注册会员的用户,发送注册邮件等. 实现延迟队列的方式有两种: 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能: 使用rabbitmq-delayed-message-exchange插件实现延迟功能: 注意: 延迟插件rabbitmq-delayed-message-exchange是在RabbitMQ 3.5.7及以上

SpringBoot RabbitMQ 延迟队列代码实现

场景 用户下单后,如果30min未支付,则删除该订单,这时候就要可以用延迟队列 准备 利用rabbitmq_delayed_message_exchange插件: 首先下载该插件:https://www.rabbitmq.com/community-plugins.html 然后把该插件放到rabbitmq安装目录plugins下: 进入到sbin目录下,执行"rabbitmq-plugins.bat enable rabbitmq_delayed_message_exchange";