当前位置: 首页 > 后端技术 > Java

你只使用xxl-job?更强大的新一代分布式任务调度框架来了,太强大了!

时间:2023-04-02 09:10:38 Java

概述PowerJob是新一代的分布式任务调度和计算框架。支持CRON、API、定频、定延时等调度策略。它提供工作流来安排任务和解决依赖关系,让您轻松完成作业调度和复杂任务。任务的分布式计算。为什么选择PowerJob?目前市面上比较流行的作业调度框架有老款的Quartz、基于Quartz的elastic-job、以及原来基于Quartz的去除依赖的xxl-job。下面是这些框架存在的一些缺点。Quartz可以算是第一代任务调度框架,基本上是所有现有分布式调度框架的“祖宗”。由于历史原因,它不提供web界面,只能通过API完成任务配置,使用起来不够方便灵活。同时,它只支持单机执行,不能有效利用整个集群的计算能力。xxl-job可以看作是第二代任务调度框架,一定程度上解决了Quartz的不足。它在前几年是一个非常优秀的调度框架,但是放到今天来看,还是有一些不足之处。如下:单库支持:只支持MySQL,使用其他DB需自行修改代码分布式计算能力有限:仅支持静态分片,不能很好完成复杂的任务计算不支持工作流:不能配置每个任务它们之间的依赖关系是不适合有DAG需求的场景。俗话说,长江后浪推前浪。在当今数据量越来越大、业务越来越复杂的时代,迫切需要一个更强大的任务调度框架来解决诉求问题,PowerJob应运而生。PowerJob可以被认为是第三代任务调度框架。在任务调度的基础上,还提供分布式计算和工作流功能。其主要特点如下:简单易用:提供前端web界面,开发者可视化完成任务管理调度任务(增、删、改、查)、任务运行状态监控和运行日志查看等功能.完善的定时策略:支持四种定时调度策略:CRON表达式、固定频率、固定延迟和API。丰富的执行模式:支持单机、广播、Map、MapReduce四种执行模式。其中,Map/MapReduce处理器使开发者仅需几行代码即可获得集群分布式计算能力。DAG工作流支持:支持在线配置任务依赖,可视化安排任务,也支持上下游任务之间的数据传递Executors支持广泛:支持SpringBean、内置/外部Java类、Shell、Python等,广泛的应用。运维便捷:支持在线日志功能,执行器产生的日志可以实时显示在前端控制台页面,降低调试成本,大大提高开发效率。依赖简化:Minimal只依赖关系型数据库(MySQL/PostgreSQL/Oracle/MSSQLServer...),同时支持SpringDataJPA支持的所有关系型数据库。高可用&高性能:调度服务器经过精心设计,改变了其他调度框架基于数据库锁的策略,实现了无锁调度。部署多台调度服务器可以同时实现高可用和性能提升(支持无限水平扩展)。故障转移和恢复:任务执行失败后,可以根据配置的重试策略进行重试。只要执行者集群有足够的计算节点,就可以顺利完成任务。相比同类产品,适用于需要定时执行的业务场景:比如每天早上全量同步数据,生成业务报表等。还有需要所有机器一起执行的业务场景:比如采用广播执行方式清理集群日志。有业务场景需要分布式处理:比如需要更新大量数据,单机执行时间长。可以使用Map/MapReduce处理器完成任务分发,调动整个集群加速计算。整体架构快速入门PowerJob由两部分组成:调度服务器(powerjob-server)和执行器(powerjob-worker)。powerjob-server负责提供Web服务并完成任务调度,powerjob-worker负责执行用户编写的任务代码,同时提供分布式计算能力。初始化项目SpringBoot的基础知识就不介绍了。推荐阅读这个免费教程:https://github.com/javastacks/spring-boot-best-practicegitclonehttps://github.com/KFCFans/PowerJob.gitimportIDE,源码结构如下.我们需要启动调度服务器(powerjob-server),同时在samples项目中编写自己的处理器代码启动调度服务器,创建数据库powerjob-daily,修改配置文件。配置文件的说明写在官方文档中。我不会在这里重复它们。需要修改的地方是数据库配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password。当然有mongoDB的同学也可以修改spring.data.mongodb.uri来获得完整版体验。oms.env=DAILYlogging.config=classpath:logback-dev.xml#######数据库配置#######spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8spring.datasource.core.username=rootspring.datasource.core.password=No1Bug2Please3!spring.datasource.core.hikari.maximum-pool-size=20spring.datasource.core.hikari.minimum-idle=5#######mongoDB配置,非核心依赖,可移除#######spring.data.mongodb.uri=mongodb://remotehost:27017/powerjob-daily#######邮件配置(开启邮件报警需要)#######spring.mail.host=smtp。163.comspring.mail.username=zqqspring.mail.password=qqzspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp。starttls.required=true#######资源清理配置#######oms.log.retention.local=1oms.log.retention.remote=1oms.container.retention.local=1oms.container。retention.remote=-1oms.instanceinfo.retention=1#######缓存配置#######oms.instance.metadata.cache.size=1024修改配置文件后,可以直接通过启动类com.github.kfcfans.powerjob.server启动调度.ohMyApplicationServer,观察启动日志,查看是否启动成功~启动成功后,访问http://127.0.0.1:7700/,如果web界面可以成功显示,则说明调度服务器已启动启动成功!注册应用:点击首页的应用注册按钮,填写oms-test和控制台密码(进入控制台),注册示例应用(当然也可以注册其他appName,别忘了在示例程序中修改~)编写示例代码进入示例工程(powerjob-worker-samples),修改配置文件连接powerjob-server,编写自己的processor代码修改启动配置类com.github.kfcfanspowerjob-worker-samples的.powerjob.samples.OhMySchedulerConfig,把Ap??pName改成刚才在控制台注册的名字。@ConfigurationpublicclassOhMySchedulerConfig{@BeanpublicOhMyWorkerinitOMS()throwsException{//服务器HTTP地址(端口号是server.port,不是ActorSystem端口)ListserverAddress=Lists.newArrayList("127.0.0.1:7700");//1.创建配置文件OhMyConfigconfig=newOhMyConfig();配置.setPort(27777);config.setAppName("oms-test");config.setServerAddress(serverAddress);//如果没有大的Map/MapReduceconfig.setStoreStrategy(StoreStrategy.MEMORY);//2.创建一个Worker对象并设置配置文件OhMyWorkerohMyWorker=newOhMyWorker();ohMyWorker.setConfig(配置);返回ohMyWorker;}}编写自己的处理器:找个地方新建一个类,继承你要使用的处理器(各个处理器的介绍可以在官方文档中找到,文档很详细),这里做一个简单的演示,选择使用独立处理器BasicProcessor,下面是代码示例。@Slf4j@ComponentpublicclassStandaloneProcessorDemoimplementsBasicProcessor{@OverridepublicProcessResultprocess(TaskContextcontext)throwsException{OmsLoggeromsLogger=context.getOmsLogger();omsLogger.info("StandaloneProcessorDemo启动进程",contextis{})..out.println("jobParams是"+context.getJobParams());returnnewProcessResult(true,"处理成功~");}}启动示例程序,即直接运行主类com.github.kfcfans.powerjob.samples.SampleApplication,观察控制台输出信息判断是否启动成功。任务配置与运行调度服务器和示例工程启动后,再次进入网页(http://127.0.0.1:7700/)配置并运行任务。在首页的输入框中输入配置的应用名称。运行成功后,将正式进入前端管理界面。点击任务管理->新建任务(右上角)开始创建任务。任务创建完成后,可以在控制台看到刚刚创建的任务。如果觉得等待调度时间过长,可以直接点击运行按钮,立即运行任务。进入任务示例侧边栏查看任务运行状态和在线日志。基础教程到此结束。更多功能示例可以在官方文档中找到。工作流、MapReduce和容器等高级功能正在等待您探索。开源地址:https://github.com/PowerJob/P...版权声明:本文为CSDN博主“LY_624”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文链接及本文为转载声明。