竹笋

首页 » 问答 » 常识 » RabbitMQ实现订单超时案例
TUhjnbcbe - 2023/8/28 20:30:00
北京哪个医院专业治疗白癜风 https://wapyyk.39.net/bj/zhuanke/89ac7.html

用戶在购买商品的时候通常会预购然后没付款,没付款的订单通常会被设置一个自动超时时间如30分钟后超时,所以我们要在订单到30分钟后自动将超时的订单取消。

JUC(DelayQueue)方案#

DelayQueue简介

DelayQueue是java并发包下的延时阻塞队列,常用于实现定时任务。

DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素。

DelayQueue主要用于两个方面:-缓存:清掉缓存中超时的缓存数据-任务超时处理

DelayQueue实现了BlockingQueue,所以它是一个阻塞队列。

DelayQueue还组合了一个叫做Delayed的接口,DelayQueue中存储的所有元素必须实现Delayed接口。

JUCDelayQueue实现订单超时案例代码案例代码

定义订单超时对象:

Copy/***juc定义延迟对象信息*

authorwuwentao*/

DatapublicclassOrderimplementsDelayed{publicOrder(StringorderId,longsecond){this.orderId=orderId;second=second*;this.timeout=System.currentTimeMillis()+second;}privateStringorderId;//订单号privatelongtimeout;//具体的超时时间/***延迟任务会自动调用该方法如果是负数则说明对象到了时间*/

OverridepubliclonggetDelay(TimeUnitunit){returnthis.timeout-System.currentTimeMillis();}/***定义排序规则*/

Overridepublicint
1
查看完整版本: RabbitMQ实现订单超时案例