Advertisement

RabbitMQ延迟队列实现

阅读量:

目录

应用情境

消息延时传送的达成

实验数据

应用场景分析

当前市面上广泛使用的应用程序中,普遍存在消息延迟推送的机制,其应用范围也十分广泛,例如:

淘宝七天自动确认收货功能。 当用户完成商品签收后,物流系统将在七天后通过消息中间件延迟发送通知至支付系统,从而触发支付流程将款项转给商家。这一过程持续七天,正是借助了消息中间件所提供的延迟推送特性。

12306 购票支付确认页面。 在用户选定车票并点击确认后跳转的页面中,通常会显示一个倒计时提示信息,表示若在30分钟内未完成订单确认操作,则系统将自动取消该订单。实际上,在下单的瞬间购票业务系统便会向订单系统发送一条延时消息,并设定30分钟的延迟时间。该消息用于告知订单系统当前订单尚未完成。如果用户在规定时间内完成操作,则可通过逻辑代码判断来忽略接收到的这条延时消息。

上述两种应用场景中,若采用以下三种传统解决方案,则会对系统的整体性能和吞吐能力造成显著影响:

第一种方案是使用 redis 为订单设置过期时间,并通过检查 redis 中是否存在该订单来判断其是否已完成。相较于消息延迟推送方式,这种方法在性能上存在明显劣势。因为 redis 数据存储于内存中,在面对恶意下单或刷单行为时,可能会对内存资源造成巨大压力。

第二种方案是采用传统的数据库轮询机制来检测数据库表中的订单状态。这

全部评论 (0)

还没有任何评论哟~