1

背景

最近调研调度工具时, 看到了 Github 上的XXL-JOB,已在美团内部、以及其他公司有生产应用。

特点

整体情况: XXL-JOB是基于开源 Quartz 调度内核的、为方便企业调度场景而开源的一款实用的调度工具。自带任务配置页面, 任务监控, 分布式执行器等功能。

  • 支持在页面上下发 Groovy, Shell 等脚本任务; 也可以通过在Executor中内置任务
  • 具备在多个 Executor 中轮转调度的能力(包括简单的任务分片功能)
  • 调度任务是一个整体, 不能编辑一个大任务的流程图, 并跟踪每个节点的执行状态
  • 多个任务之间, 无法配置依赖关系、依次运行(比如上游任务给下游任务发信号)

调度内核

见 xxl-job-admin 配置:

<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="autoStartup" value="true" />            <!--自动启动 -->
        <property name="startupDelay" value="20" />                <!--延时启动,应用启动成功后在启动 -->
        <property name="overwriteExistingJobs" value="true" />    <!--覆盖DB中JOB:true、以数据库中已经存在的为准:false -->
        <property name="applicationContextSchedulerContextKey"  value="applicationContextKey" />
        <property name="configLocation" value="classpath:quartz.properties"/>
</bean>
  • 内核依赖Quartz, 任务信息注册到mysql中, 在指定的时间点(cron表达式), SchedulerFactoryBean 会根据任务信息指定的 job class 来拉起任务, xxl-job-admin 再把任务分配到executor中运行。
  • xxl-job-admin和job-executor之间, 使用了自定义的rpc协议,该rpc使用hessian 做序列化,在http层传输
  • 分片广播: xxl-job-admin将分片分别发送到job-executor,executor在线程上下文中获取分片索引

HealStone
1 声望0 粉丝

全栈工程师带项目


引用和评论

0 条评论