更强大、更智能的任务调度框架 - Openjob 1.0.7 发布
介绍
- 高可靠
- 分布式无状态设计,采用 Master/Worker 架构,支持多样的数据库(H2/MySQL/PostgreSQL/Oracle/TiDB)
- 高性能
- 底层使用一致性分片算法,全程无锁化设计,任务调度精确到秒级别,支持轻量级分布式计算、无限水平扩容。
- 定时调度
- 支持分布式定时任务、固定频率任务、高性能秒级任务、一次性任务定时调度。
- 分布式计算
- 支持单机、广播、Map、MapReduce 和分片多种分布式编程模型,轻松实现大数据分布式计算。
- 延时任务
- 基于 Redis 实现高性能延时任务,底层实现任务多级存储,提供丰富的统计和报表。
- 工作流
- 内置工作流调度引擎,支持可视化 DAG 设计,简单高效实现复杂任务调度。
- 权限管理
- 完善的用户管理,支持菜单、按钮以及数据权限设置,灵活管理用户权限
- 报警监控
- 全面的监控指标,丰富及时的报警方式,便于运维人员快速定位和解决线上问题。
- 跨语言
- 原生支持 Java/Go/PHP/Python 多语言 ,以及Spring Boot、Gin、Swoft 等框架集成。
更新内容
秒级任务
- 高可靠:秒级别任务具有高可靠的特性,如果某台机器宕机,可以在另一台机器上重新运行。
- 丰富的任务类型:秒级别任务属于定时调度类型,可以适用于所有的任务类型和执行方式。
固定频率任务
Map Reduce
/** * @author stelin swoft@qq.com * @since 1.0.7 */ @Component("mapReduceTestProcessor") public class MapReduceTestProcessor implements MapReduceProcessor { private static final Logger logger = LoggerFactory.getLogger("openjob"); private static final String TWO_NAME = "TASK_TWO"; private static final String THREE_NAME = "TASK_THREE"; @Override public ProcessResult process(JobContext context) { if (context.isRoot()) { List<MapChildTaskTest> tasks = new ArrayList<>(); for (int i = 1; i < 5; i++) { tasks.add(new MapChildTaskTest(i)); } logger.info("Map Reduce root task mapList={}", tasks); return this.map(tasks, TWO_NAME); } if (context.isTask(TWO_NAME)) { MapChildTaskTest task = (MapChildTaskTest) context.getTask(); List<MapChildTaskTest> tasks = new ArrayList<>(); for (int i = 1; i < task.getId()*2; i++) { tasks.add(new MapChildTaskTest(i)); } logger.info("Map Reduce task two mapList={}", tasks); return this.map(tasks, THREE_NAME); } if (context.isTask(THREE_NAME)) { MapChildTaskTest task = (MapChildTaskTest) context.getTask(); logger.info("Map Reduce task three mapTask={}", task); return new ProcessResult(true, String.valueOf(task.getId() * 2)); } return ProcessResult.success(); } @Override public ProcessResult reduce(JobContext jobContext) { List<String> resultList = jobContext.getTaskResultList().stream().map(TaskResult::getResult) .collect(Collectors.toList()); logger.info("Map Reduce resultList={}", resultList); return ProcessResult.success(); } @Data @AllArgsConstructor @NoArgsConstructor public static class MapChildTaskTest { private Integer id; } }
分片任务
- 静态分片:主要场景是处理固定的分片数,例如分库分表中固定 256 个库,需要若干台机器分布式去处理。
- 动态分片:主要场景是分布式处理未知数据量的数据,例如一张大表在不停变更,需要分布式跑批。此时需要使用 MapReduce 任务
- 兼容 elastic-job 的静态分片模型。
- 支持 Java、PHP 、Python、Shell、Go四种语言。
- 高可用:分片任务执行机器异常时,会动态分配到其它正常机器执行任务。
- 流量控制:可以设置单机子任务并发数。例如有 100 个分片,一共 3 台机器,可以控制最多 5 个分片并发执行,其它在队列中等待。
- 失败重试:子任务执行失败异常时,自动重试。
/** * @author stelin swoft@qq.com * @since 1.0.7 */ @Component public class ShardingAnnotationProcessor { private static final Logger logger = LoggerFactory.getLogger("openjob"); @Openjob("annotationShardingProcessor") public ProcessResult shardingProcessor(JobContext jobContext) { logger.info("Sharding annotation processor execute success! shardingId={} shardingNum={} shardingParams={}", jobContext.getShardingId(), jobContext.getShardingNum(), jobContext.getShardingParam()); logger.info("jobContext={}", jobContext); return ProcessResult.success(); } }
广播任务
- 批量操作
- 定时广播所有机器运行某个脚本。
- 定时广播所有机器清理数据。
- 动态启动每台机器的某个服务
- 数据聚合
- 使用JavaProcessor->preProcess 初始化
- 每台机器执行 process 时,根据自己业务返回 result。
- 执行 postProcess,获取所有机器的执行结果做汇总。
- preProcess 会在每台机器执行 process 之前执行,且只会执行一次。
- process 每天机器实际任务执行逻辑。
- postProcess 会在每台机器执行 process 完成且都成功执行之后执行一次,可以返回结果,作为工作流数据传输。
/** * @author stelin swoft@qq.com * @since 1.0.7 */ @Component("broadcastPostProcessor") public class BroadcastProcessor implements JavaProcessor { private static final Logger logger = LoggerFactory.getLogger("openjob"); @Override public void preProcess(JobContext context) { logger.info("Broadcast pre process!"); } @Override public ProcessResult process(JobContext context) throws Exception { logger.info("Broadcast process!"); return new ProcessResult(true, "{\"data\":\"result data\"}"); } @Override public ProcessResult postProcess(JobContext context) { logger.info("Broadcast post process taskList={}", context.getTaskResultList()); System.out.println(context.getTaskResultList()); return ProcessResult.success(); } }
更多内容
- 在线体验: https://demo.openjob.io
- 用户名: openjob
- 密码: openjob.io

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PicList 2.6.0 发布,图床管理和上传工具,巨幅优化性能
PicList是一款高效的云存储和图床平台管理工具,在PicGo的基础上经过深度的二次开发,不仅完整保留了PicGo的所有功能,还增添了许多新的feature。例如相册支持同步云端删除文件,内置图床额外添加了WebDav、本地图床和SFTP等。PicList同时增加了完整的云存储管理功能,包括云端目录查看、文件搜索、批量上传下载和删除文件,复制多种格式文件链接和图片/markdown/文本/视频预览等,另外还有更加强大的相册和多项功能新增或优化。 开源地址和软件官网 Github: https://github.com/Kuingsmile/PicList Gitee: https://gitee.com/kuingsmile/PicList 软件官网:https://piclist.cn 下载地址 MacOS PicList-2.6.0-arm64.dmg PicList-2.6.0-x64.dmg PicList-2.6.0-universal.dmg Windows PicList-Setup-2.6.0-ia32.exe PicList-Setup-2.6.0-x64.exe ...
- 下一篇
ElectronEgg v3.7.0 正式发布,跨平台桌面软件开发
为什么使用 桌面软件(办公方向、个人工具),仍然是未来十几年 PC 端需求之一,提高工作效率 electron 技术是流行趋势,QQ、百度翻译、阿里网盘、迅雷、有道云笔记 ...... 简单 只需懂 JavaScript 开源 gitee:https://gitee.com/dromara/electron-egg3700+ github:https://github.com/dromara/electron-egg1000+ 本次更新 ### 3.7.0 1. 【增加】新增 config/bin.js配置文件,统一处理 ee-bin 功能配置项。 2. 【增加】新增 ee-bin dev 命令,同时启动 frontend electron 服务。 3. 【增加】新增 ee-bin start 命令,使用node spawn启动electron。 4. 【增加】新增 ee-bin build 命令,构建出包含renderer进程数据的process。 5. 【增加】新增 ee-core boot、failure页面,优化开发体验。 6. 【增加】新增 ee-core jsondb支持修...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启