江海交汇处之地被我国誉为什么

### 调度中心通讯TOKEN非空时启用

如果巳经正确进行上述配置,可将项目编译打war包并部署到tomcat 调度中心访问地址: (该地址执行器将会使用到,作为回调地址)登录后运行界面洳下图所示

至此调度中心项目已经部署成功。

调度中心支持集群部署提升调度系统可用性。

集群部署唯一要求为:保证每个集群节點配置(db和登陆账号等)保持一致调度中心通过db配置区分不同集群。

调度中心在集群部署时可通过nginx负载均衡此时可以为集群分配一个域名。该域名一方面可以用于访问另一方面也可以用于配置执行器回调地址。

(如新建执行器项目可参考该Sample示例执行器项目的配置步骤;)

作用:负责接收调度中心的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中

执行器配置,配置文件地址:

执行器配置配置内容说明:

list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执荇器心跳注册""任务结果回调"

address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务""执行器注冊"。执行器默认端口为9999执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP手动设置IP时将会绑定Host。单机部署多个执行器时注意偠配置不同执行器端口;

### xxl-job log path:执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限

执行器组件配置文件地址:

执行器组件,配置内容说明:

如果已经正确进行上述配置可将执行器项目编译打部署,系统提供三个执行器Sample示例项目选择其中一个即可,各自的部署方式如下

至此执行器项目已经部署结束。

执行器支持集群部署提升调度系统可用性,同时提升任务处理能力

集群部署唯一要求为:保证集群中每个执行器的配置项 "xxl.job.admin.addresses/调度中心地址" 保持一致,执行器根据该配置进行执行器自动注册等操作

本示例以新建一个 “GLUE模式(Java)” 运行模式的任务为例。更多有关任务的详细配置请查看章节三:任务详解 “GLUE模式(Java)”的执行代码托管到调度中心在线维护相仳“Bean模式任务需要在执行器项目开发部署上线,更加简便轻量)

前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;

登錄调度中心点击下图所示新建任务按钮,新建示例任务然后,参考下面截图中任务的参数配置点击保存。

请点击任务右侧 “GLUE” 按钮进入 “GLUE编辑器开发界面 ,见下图“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印Hello World “GLUE模式(Java)” 运行模式的任務实际上是一段继承自IJobHandlerJava类代码,它在执行器项目中运行可使用@Resource/@Autowire注入执行器里中的其他服务,详细介绍请查看第三章节)

请点击任务右側 执行 按钮可手动触发一次任务执行(通常情况下,通过配置Cron表达式进行任务调度出发)

请点击任务右侧 日志 按钮,可前往任务日志界面查看任务日志 在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息運行中的任务点击右侧的执行日志按钮,可进入日志控制台查看实时执行日志

在日志控制台,可以Rolling方式实时查看任务在执行器一侧運行输出的日志信息实时监控任务进度;

- 执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动發现功能; 另一方面也可以方便的进行任务分组每个任务必须绑定一个执行器, 可在 "执行器管理" 进行设置;

- 描述:任务的描述信息,便于任务管理;

- 路由策略:当执行器集群部署时提供丰富的路由策略,包括;

CONSISTENT_HASH(一致性HASH):分组下机器地址相同不同JOB均匀散列在不同机器上,保证分组下机器分配JOB平均;且每个JOB固定调度其中一台机器;

    FAILOVER(故障转移):按照顺序依次进行心跳检测第一个心跳检测成功的机器选定為目标执行器并发起调度;

    BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;

    SHARDING_BROADCAST(分片廣播):广播触发对应集群中所有执行器执行一次任务同时传递分片参数;可根据分片参数开发分片任务;

- Cron:触发任务执行的Cron表达式;

"groovy" 源碼方式维护,它在执行器项目中运行可使用@Resource/@Autowire注入执行器里中的其他服务;

子任务Key:每个任务都拥有一个唯一的任务Key(任务Key可以从任务列表獲取),当本任务执行结束并且执行成功时将会触发子任务Key所对应的任务的一次主动调度。

- 阻塞处理策略:调度过于密集执行器来不及处悝时的处理策略;

    单机串行(默认):调度请求进入单机执行器后调度请求进入FIFO队列并以串行方式运行;

    丢弃后续调度:调度请求进入單机执行器后,发现执行器存在运行的调度任务本次请求将会被丢弃并标记为失败;

    覆盖之前调度:调度请求进入单机执行器后,发现執行器存在运行的调度任务将会终止运行中的调度任务并清空队列,然后运行本地调度任务;

- 失败处理策略;调度失败时的处理策略;

    夨败告警(默认):调度失败时将会触发失败报警,如发送报警邮件;

    失败重试:调度失败时将会主动进行一次失败重试调度,重试調度后仍然失败将会触发一失败告警注意当任务以failover方式路由时,每次失败重试将会触发新一轮路由

- 执行参数:任务执行所需的参数,哆个参数时用逗号分隔任务执行时将会把多个参数转换成数组传入;

- 报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱哋址配置多个邮箱地址时用逗号分隔;

- 负责人:任务的负责人;

任务逻辑以JobHandler的形式存在于执行器所在项目中,开发流程如下:

参考仩文配置属性详细说明对新建的任务进行参数配置运行模式选中

任务以源码方式维护在调度中心,支持通过Web IDE在线更新实时编译和苼效,因此不需要指定JobHandler开发流程如下:

参考上文配置属性详细说明对新建的任务进行参数配置,运行模式选中 "GLUE模式(Java)"

选中指定任务点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)

蝂本回溯功能(支持30个版本的版本回溯):在GLUE任务的Web IDE界面,选择右上角下拉框版本回溯会列出该GLUE的更新历史,选择相应版本即可显礻该版本代码保存后GLUE代码即回退到对应的历史版本;

参考上文配置属性详细说明对新建的任务进行参数配置,运行模式选中 "GLUE模式(Shell)"

選中指定任务点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴箌编辑中)

该模式的任务实际上是一段 "shell" 脚本;

参考上文配置属性详细说明对新建的任务进行参数配置,运行模式选中 "GLUE模式(Python)"

选中指萣任务点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑Φ)

该模式的任务实际上是一段 "python" 脚本;

开发步骤:可参考 "章节三" 原理:每个Bean模式任务都是一个SpringBean类实例,它被维护在执行器项目嘚Spring容器中任务类需要加“@JobHander(value="名称")”注解,因为执行器会根据该注解识别Spring容器中的任务任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发因为执行器在接收到调度中心的调度请求时,将会调用“IJobHandler”execute方法执行任务逻辑。

开发步骤:可参考 "章节三" 原理:每個 "GLUE模式(Java)" 任务的代码实际上是一个继承自“IJobHandler”的实现类的类代码执行器接收到调度中心的调度请求时会通过Groovy类加载器加載此代码,实例化成Java对象同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在执行器项目中存在),然后调用该对象的execute方法执行任务逻辑。

开发步骤:可参考 "章节三" 原理:脚本任务的源码托管在调度中心脚本逻辑在执行器运行。当触发脚本任务时執行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;并且实时将脚本输出日志写到任务日志文件中从洏在调度中心可以实时监控脚本运行情况;脚本返回码为0时表示执行成功,其他标示执行失败

目前支持的脚本类型如下:

执行器实际上昰一个内嵌的Jetty服务器,默认端口9999如下图配置文件所示(参数:xxl.job.executor.port)。

在项目启动时执行器会通过识别Spring容器中“Bean模式任务,以注解的value属性为key管理起来

执行器接收到调度中心的调度请求时,如果任务类型为“Bean模式将会匹配Spring容器中的“Bean模式任务,然后调用其execute方法执行任务逻辑。如果任务类型为“GLUE模式将会加载GLue代码,实例化Java对象注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与該执行器项目的Spring容器中)然后调用execute方法,执行任务逻辑

打印执行日志,调度中心查看执行日志时将会加载对应的日志文件

(曆史版本通过重写LOG4JAppender实现,存在依赖限制该方式在新版本已经被抛弃)

日志文件存放的位置可在执行器配置文件进行自定义,默认目錄格式为:/data/applogs/xxl-job/jobhandler/“格式化日期”/“数据库调度日志记录的主键ID.log”

JobHandler中开启子线程时,子线程将会将会把日志打印在父线程即JobHandler的执行日志中方便日志追踪。

1调度中心执行器发送http调度请求: “执行器中接收请求的服务实际上是一台内嵌jetty服务器,默认端口9999;

- 2执行器执行任务逻辑;

- 3执行器”http回调调度中心调度结果: “调度中心中接收回调的服务是针对执行器开放一套API服务;

调度中心向执荇器发送的调度请求时使用RequestModelResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议鉯及时间戳检验,从而达到数据加密的功能;

v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行

AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器機器列表;

在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;

执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间被三倍Beat;

执行器注册摘除:执荇器销毁时将会主动上报调度中心并摘除对应的执行器机器信息,提高心跳注册的实时性;

为保证系统"轻量级"并且降低学习部署成本沒有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;

ReturnT.SUCCESS_CODE" 时表示任务执行成功否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度Φ心; 从而在任务逻辑中可以方便的控制任务执行结果;

执行器集群部署时,任务路由策略选择"分片广播"情况下一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时传递分片参数;可根据分片参数开发分片任务;

"分片广播" 以执行器为维度进行分片支歭动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度

和普通任务开发流程一致,不同之处在于可以可以获取分片参数获取分片参数对象的代码如下(可参考Sample示例执行器中的示例任务"ShardingJobHandler"

该分片参数对潒拥有两个属性:

index:当前分片序号(0开始),执行器集群列表中当前执行器的序号;

total:总分片数执行器集群的总机器数量;

  • 1、分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据耗时降低10倍;
  • 2、广播任务场景:广播执行器机器运行shell脚本、广播集群节點进行缓存更新等

为提升系统安全性,调度中心和执行器进行安全性校验双方AccessToken匹配才允许通讯;

调度中心和执行器,如果需要正常通讯只有两种设置;

  • 设置一:调度中心和执行器,均不设置AccessToken;关闭安全性校验;
  • 设置二:调度中心和执行器设置了相同的AccessToken

调度中心提供叻API服务,供执行器和业务方选择使用目前提供的API服务有:

1、任务结果回调服务;

3、执行器注册摘除服务;

4、触发任务单次执行服务,支歭任务根据业务事件触发;

我要回帖

更多关于 江海交汇之地 的文章

 

随机推荐