分布式任务调度快速入门

分布式调度    任务调度的实现:触发器+线程池=任务调度    实现的思想:        1.调度线程:有个后台守护线程不停的轮训--触发器        2.若触发器到达临界值,则根据触发器对应出它的job,去线程池里取一个线程来执行job        3.如果线程池全忙,则阻塞等待线程    解决方案:        1.在分布式环境里,只部署一台job        2.使用分布式调度架构:            Elastic-Job(当当网) ,官网:http://elasticjob.io/docs/elastic-job-lite/00-overview/            xxl-job,官网:http://www.xuxueli.com/xxl-job/#/

实战:        1.非分布式环境调度的实现 quartz            依赖:                <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->                <dependency>                    <groupId>org.quartz-scheduler</groupId>                    <artifactId>quartz</artifactId>                    <version>2.3.0</version>                </dependency>            详见com.suns.job.quartz        2.非分布式环境调度的实现 spring-boot-starter-quartz + quartz (只做demo演示,线上不会使用这种方式)            依赖:               <!-- 1.非分布式环境调度的实现 quartz -->               <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->               <dependency>                   <groupId>org.quartz-scheduler</groupId>                   <artifactId>quartz</artifactId>                   <version>2.3.0</version>               </dependency>               <!-- 2.非分布式环境调度的实现 spring-boot-starter-quartz + quartz -->               <dependency>                   <groupId>org.springframework.boot</groupId>                   <artifactId>spring-boot-starter-quartz</artifactId>               </dependency>            详见com.suns.job.quartz.springboot        3.非分布式环境调度的注解方式实现 spring-boot-starter-quartz             依赖:                <dependency>                   <groupId>org.springframework.boot</groupId>                   <artifactId>spring-boot-starter-quartz</artifactId>                </dependency>            增加注解: 1.启用注解 @EnableScheduling()   2.在方法上增加@Scheduled(...)            详见com.suns.job.annotation.springboot        4.分布式调度Elastic-job (参考https://github.com/yinjihuan/elastic-job-spring-boot-starter)            1.依赖:                第一步添加仓库地址:                <repositories>                        <repository>                            <id>jitpack.io</id>                            <url>https://jitpack.io</url>                        </repository>                </repositories>                第二步添加依赖:                <dependency>                        <groupId>com.github.yinjihuan</groupId>                        <artifactId>elastic-job-spring-boot-starter</artifactId>                        <version>1.0.4</version>                </dependency>            2.在application.properties中增加如下配置:                ###################################################ElasticJob 配置 start###################################################                # zk注册中心                elastic.job.zk.serverLists=127.0.0.1:2181                elastic.job.zk.namespace=enjoy_job                #elastic.job.eJob1与 @ElasticJobConf(name = "eJob1") 对应                elastic.job.eJob1.cron=0/10 * * * * ?                # 分片为2来跑                elastic.job.eJob1.shardingTotalCount=2                elastic.job.eJob1.shardingItemParameters=0=beijing,1=shanghai                #elastic.job.EnjoyJob.listener=cn.enjoy.jobs.elasticjob.utils.MessageElasticJobListener                #elastic.job.EnjoyJob.jobExceptionHandler=cn.enjoy.jobs.elasticjob.utils.CustomJobExceptionHandler                ###################################################ElasticJob 配置 end###################################################            3.elastic-job依赖zookeeper,需要启动zookeeper            4.详见com.suns.job.elasticjob                其中ElasticJobApp1启动端口,要与ElasticJobApp2启动端口不一样,修改配置文件中server.port=8081的值

5.分布式调度xxl-job            1.下载源码:https://github.com/xuxueli/xxl-job            2.初始化数据库脚本,脚本在源码中                如xxl-job\doc\db\tables_xxl_job.sql  ,有可能建表语句会包索引太长,根据情况修改字段长度            3.修改xxl-job-admin的配置                /xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties(主要是连接数据库的配置)            4.编译并打包xxl-job-admin            5.运行xxl-job-admin                入口:http://127.0.0.1:8080/xxl-job-admin   (页面出来说明成功,账号密码默认admin/123456)

6.与项目整合                1.增加依赖                    <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->                    <dependency>                        <groupId>com.xuxueli</groupId>                        <artifactId>xxl-job-core</artifactId>                        <version>${最新稳定版本}</version>                    </dependency>                2.编写自己的业务实现MyGuleJobHandler,需要增加@JobHandler注解                    @JobHandler(value = "myGuleJobHandler")//注解value值对应的是调度中心新建任务的JobHandler属性的值                    @Component                    public class MyGuleJobHandler extends IJobHandler                3.启动XxlJonApp1                4.配置执行器:在http://127.0.0.1:8080/xxl-job-admin的[执行器管理]中新增名为xxl-mk的执行器                    刷新几次执行器管理页面,就可以看到调用的ip                5.配置任务:在http://127.0.0.1:8080/xxl-job-admin的[任务管理]中新增任务(JobHandler与@JobHandler注解中的value要一样)

示例二:普通任务,调用业务服务器                    配置任务:在http://127.0.0.1:8080/xxl-job-admin的[任务管理]中新增任务(JobHandler与@JobHandler注解中的value要一样)                    代码:MySimpleJob, 这个只是利用调度器 调用业务。与MyGuleJobHandler一样,比较简单                示例三:分片任务                    配置任务:在http://127.0.0.1:8080/xxl-job-admin的[任务管理]中新增任务(JobHandler与@JobHandler注解中的value要一样)                       注意:新增任务时[路由策略]要选为[分片广播]                    代码:MyShardingJob                    1.启动XxlJobApp1:修改配置文件application.properties中参数server.port=8081  xxl.job.executor.port=9991                    2.启动XxlJobApp2:修改配置文件application.properties中参数server.port=8082  xxl.job.executor.port=9992                    3.启动XxlJobApp3:修改配置文件application.properties中参数server.port=8083  xxl.job.executor.port=9993                示例四:在线开发任务逻辑代码,动态发布,实时编译生效,省略部署上线的过程  (业务服务器是没有具体实现的,通过在线新增代码,来运行)                    配置任务:在http://127.0.0.1:8080/xxl-job-admin的[任务管理]中新增任务                       1.新增任务时[运行模式]要选为[GLUE(Java)],设置其他参数保存                       2.在[操作]中点击[GLUE]按钮,跳转到在线编辑代码页面,新增如下代码                            package com.xxl.job.service.handler;                            import com.xxl.job.core.log.XxlJobLogger;                            import com.xxl.job.core.biz.model.ReturnT;                            import com.xxl.job.core.handler.IJobHandler;                            import org.springframework.stereotype.Component;                            import org.springframework.beans.factory.annotation.Autowired;                            import com.suns.job.service.BusinessService;

@Component                            public class DemoGlueJobHandler extends IJobHandler {

@Autowired                                private BusinessService businessService;

@Override                                public ReturnT<String> execute(String s) throws Exception {                                  XxlJobLogger.log("XXL-JOB, Hello World.");                                  System.out.println("动态植入代码啦:"+s);                                    businessService.process(0,1,s);//调用业务服务                                    return ReturnT.SUCCESS;                                }

}                        3.注意:如果注入了业务代码(BusinessService),一定要导包,否则会报错,注解@Component 或 @Autowired 的包也需要导入

原文地址:https://www.cnblogs.com/lookupthesky/p/10316025.html

时间: 2024-11-06 03:41:26

分布式任务调度快速入门的相关文章

Quartz任务调度快速入门

Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息.Job运行时的信息保存在JobDataMap实例中: ●Jo

Quartz任务调度快速入门(转)

概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息.Job运行时的信息保存在 JobDataMap实例中: ●JobDetail:Quartz

分布式Dubbo快速入门

Dubbo入门Editor:SimpleWuDubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是关键

Celery 分布式任务队列快速入门

本节内容 Celery介绍和基本使用 启用多个workers Celery 定时任务 与django结合 通过django配置celery periodic task 一.Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返

Celery分布式任务队列快速入门

Celery介绍 Celery是基于Python开发的分布式任务队列.它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度. 如果业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情. 你想做一个定时任务,比如每天检测一下你们所有客

Quartz任务调度快速入门(转)

转自http://www.blogjava.net/baoyaer/articles/155645.html 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调

分布式任务调度平台XXL-JOB

为获得更好的阅读体验,请访问原文:传送门 一.分布式任务调度概述 什么是任务调度平台 任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务.我们可以思考一下在以下场景中,我们应该怎么实现: 支付系统每天凌晨 1 点,进行一天清算,每月 1 号进行上个月清算: 电商整点抢购,商品价格8点整开始优惠 12306 购票系统,超过 30 分钟没有成功支付订单的,进行回收处理 为什么需要任务调度平台 定时任务是程序员不可避免的话题,很多业务场景需要我们某一特定的时刻去做某件任务.一

Elastic-Job快速入门

1 Elastic-Job快速入门1.1 环境搭建1.1.1.版本要求JDK要求1.7及以上版本Maven要求3.0.4及以上版本zookeeper要求采用3.4.6及以上版本1.1.2.Zookeeper安装&运行https://archive.apache.org/dist/zookeeper/ 下载某版本Zookeeper,并解压.安装可以查看博客:https://www.cnblogs.com/dalianpai/p/12057064.html 1.1.3.创建maven工程创建mave

Spring快速入门

时间:2017-1-29 02:15 Spring的IOCSpring的AOP,AspectJSpring的事务管理,三大框架的整合 --什么是Spring 1.Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架.    1)分层:        *   SUN公司提供的EE的三层结构:Web层.业务层.数据访问层(持久层)        *   Struts2是Web层基于MVC设计模式框架.        *   Hibernate是持久层的一个ORM框架.