场景
1、订单成功后,在30分钟内没有支付,自动取消订单
2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。
3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存
4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等
解决方案
1、DelayQueue 延时队列
代码dome
package com.study.base.delayMessage;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.util.Date;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class DelayQueue_JDKVesion {
// data prepare
static class DalayData implements Delayed{
private long times;
public DalayData(long times){
this.times = times;
}
/**
* 需实现最低维度为:TimeUnit.NANOSECONDS 级别的剩余时间
*
* @param unit
* @return
*/
@Override
public long getDelay(TimeUnit unit) {
return times - System.nanoTime();
}
@Override
public int compareTo(Delayed o) {
DalayData od = (DalayData) o;
return this.times - od.times < -1L ? -1 : this.times - od.times == 0 ? 0 : 1;
}
}
// test
public static void main(String[] args) throws InterruptedException {
DelayQueue<DalayData> delayQueue = new DelayQueue();
delayQueue.add(new DalayData(System.nanoTime()));