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目录下。
    • 如果您在使用过程中遇到问题,可以在这里提交
  • 相关阅读:
    [转]Lucene 性能优化带数据
    Lucene Document getBoost(float) 和 setBoost(float)
    几种Lucene.Net打开IndexReader的方式
    JSON 省市数据包括港澳
    Lucene Boost 精度表
    Dot NET 内存泄漏
    对《LINQ能不能用系列(一)数组筛选效率对比》中测试的几个问题
    售前工程师的成长一个老员工的经验之谈(三)(转载)
    yum使用简介
    Hadoop源代码分析 HDFS(转载)
  • 原文地址:https://www.cnblogs.com/liuche/p/10981666.html
Copyright © 2011-2022 走看看