DelayQueue是JDK提供的一个无界队列,我们可以看到,DelayQueue队列中的元素需要实现Delayed,它只提供了一个方法,就是获取过期时间。
用户的订单生成以后,设置过期时间比如30分钟,放入定义好的DelayQueue,然后创建一个线程,在线程中通过while(true)不断的从DelayQueue中获取过期的数据。
优点:不依赖任何第三方组件,连数据库也不需要了,实现起来也方便。
缺点:因为DelayQueue是一个无界队列,如果放入的订单过多,会造成JVMOOM。DelayQueue基于JVM内存,如果JVM重启了,那所有数据就丢失了。
总结:DelayQueue适用于数据量较小,且丢失也不影响主业务的场景,比如内部系统的一些非重要通知,就算丢失,也不会有太大影响。