栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Java使用HashedWheelTimer延迟操作

Java使用HashedWheelTimer延迟操作


一、简介

我们在某些业务场景中会遇到延迟操作,比如延迟通知、订单超过30分钟未支付取消订单等,这些业务需求的实现其实很好办。


二、实现方式

具体参考(建议看看):https://juejin.cn/post/7068837416714371102

在上面的链接中,提供了扫描数据库轮训查询、Java的DelayQueue的方式,但是前者有明显的缺陷,系统负担很大,而后者的代码复杂度相对更高,所以感觉这两者都不太合适。

这里推荐使用第三种,也就是Netty的HashedWheelTimer,它很好的帮助我们实现延迟。

(1)首先是pom


    io.netty
    netty-all
    4.1.24.Final

(2)具体代码

package com;

import io.netty.util.HashedWheelTimer;
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
import java.util.concurrent.TimeUnit;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        // 定义一个时间管理队列
        HashedWheelTimer timer = new HashedWheelTimer();
        // 定义多个时间延迟任务
        MyTimerTask task1 = new MyTimerTask();
        MyTimerTask task2 = new MyTimerTask();

        timer.newTimeout(task1, 2, TimeUnit.SECONDS);
        timer.newTimeout(task2, 3, TimeUnit.SECONDS);
    }

    static class MyTimerTask implements TimerTask {
        @Override
        public void run(Timeout timeout) throws Exception {
            System.out.println("-----------------执行操作-----------------");
        }
    }
}

它的优势在于,效率高,任务触发时间延迟时间比delayQueue低,代码复杂度比delayQueue低。但缺陷也是非常明显,那就是服务器重启后,数据全部消失。


总结

我们能够看到HashedWheelTimer的优点和缺点,不管是Java的DelayQueue还是HashedWheelTimer,在项目停止时数据都会消失,这是硬伤。在这种时候,使用RabbitMQ实际上是一种很优雅、明智的方法,值得一试。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号