zoukankan      html  css  js  c++  java
  • 单机版延时任务处理组件EasyTask-入门篇

    easyTask介绍

    • 一个方便触发一次性或周期性任务执行的工具包,支持海量,高并发,高可用,宕机自动恢复任务

    使用场景

    • 需要精确到秒的某一时刻触发任务执行。比如订单交易完成24小时后如果客户未评价,则系统自动给出评价。
    • 需要周期性的执行某个任务。比如每天下午6点,提醒员工下班关机。

    特性

    • 使用简单
    • 秒级精度任务执行计划
    • 支持海量任务提交执行
    • 支持高并发执行任务
    • 支持任务持久化,宕机自动恢复任务计划
    • 支持自定义线程池、任务持久化保存路径

    架构

    开始使用

    • pom添加引用
    <dependency>
        <groupId>com.github.liuche51</groupId>
        <artifactId>easyTask</artifactId>
        <version>1.0.1</version>
    </dependency>
    • 定义好您要执行的任务类 Define the task class you want to perform
    public class CusTask1 extends Schedule implements Runnable {
        private static Logger log = LoggerFactory.getLogger(CusTask1.class);
    
        @Override
        public void run() {
            Map<String, String> param = getParam();
            if (param != null && param.size() > 0)
                log.info("任务1已执行!姓名:{} 生日:{} 年龄:{} 线程ID:{}", param.get("name"), param.get("birthday"), param.get("age"),param.get("threadid"));
    
        }
    }
    • 简单应用示例代码 Simply apply the sample code
    public class Main {
        private static Logger log = LoggerFactory.getLogger(Main.class);
        private static AnnularQueue annularQueue=AnnularQueue.getInstance();
        private static Object obj=new Object();
        public static void main(String[] args){
            allcustomSimpleSetTest();
        }
        static void allcustomSimpleSetTest(){
            try {
                annularQueue.start();
                CusTask1 task1 = new CusTask1();
                task1.setEndTimestamp(ZonedDateTime.now().plusSeconds(10).toInstant().toEpochMilli());
                Map<String,String> param=new HashMap<String,String>(){
                    {
                        put("name","刘彻");
                        put("birthday","1988-1-1");
                        put("age","25");
                        put("threadid",String.valueOf(Thread.currentThread().getId()));
                    }
                };
                task1.setParam(param);
                CusTask1 task2 = new CusTask1();
                task2.setPeriod(30);
                task2.setImmediateExecute(true);
                task2.setTaskType(TaskType.PERIOD);
                task2.setUnit(TimeUnit.SECONDS);
                Map<String,String> param2=new HashMap<String,String>(){
                    {
                        put("name","Jack");
                        put("birthday","1986-1-1");
                        put("age","32");
                        put("threadid",String.valueOf(Thread.currentThread().getId()));
                    }
                };
                task2.setParam(param2);
                annularQueue.submit(task1);
                annularQueue.submit(task2);
                obj.wait();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    注意

    • 此构件已在Windows和centos下做了适当测试,目前未在生产环境中使用过
    • 为了更好的保证系统故障自动恢复任务,请自定义程序任务持久化文件保存的路径(不同应用文件路径定义不同为好,以免被其他应用覆盖),并确保读写权限。如果以 jar包运行,文件默认在同级目录;如果以war包在tomcat下运行,文件默认在tomcat的bin目录下。
    • 如果您在使用过程中遇到问题,可以在这里提交
  • 相关阅读:
    POJ 3114 Tarjan+Dijkstra
    278. First Bad Version
    209. Minimum Size Subarray Sum
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    710. Random Pick with Blacklist
    767. Reorganize String
    524. Longest Word in Dictionary through Deleting
    349. Intersection of Two Arrays
    350. Intersection of Two Arrays II
  • 原文地址:https://www.cnblogs.com/liuche/p/10981666.html
Copyright © 2011-2022 走看看