jarvis 模块主要保基于quartz 包装了一些调度以及任务管理,包含了刷新job ,全局job
同时也暴露为了一个通用的guice 模块,同时基于jesque进行后台任务以及延迟任务的处理
通过代码会发现jesque 占比是比较多的(好多任务处理的,状态标记的),而且quartz更多是
与后台work的处理,主要处理定时任务(主要是稳定可靠的任务处理,比如kafaka 消息生产)
简单任务处理基于了jesque
参考处理图
app jarvis 配置参考
此配置来自app,可以了解到jarvis 需要那些配置参数
jarvis_task_config:
priority_cool_down_mins: 1
group_config:
- group: PIPELINE_RUN
worker_count: 10
- group: OTHERS
worker_count: 10
jarvis_scheduler_config:
quartz_config:
org.quartz.scheduler.skipUpdateCheck: true
org.quartz.scheduler.instanceName: DatabaseScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.jobFactory.class: org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 3
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties: false
org.quartz.jobStore.dataSource: quartzDataSource
org.quartz.jobStore.tablePrefix: QRTZ_
org.quartz.jobStore.isClustered: true
org.quartz.jobStore.clusterCheckinInterval: 60000
org.quartz.dataSource.quartzDataSource.driver: com.mysql.cj.jdbc.Driver
org.quartz.dataSource.quartzDataSource.URL: ${APP_DATABASE_URL:-jdbc:mysql://localhost:3306/app?autoReconnect=true&user=user&password=user&useSSL=false&serverTimezone=UTC}
org.quartz.dataSource.quartzDataSource.user: ${APP_DATABASE_USER:-user}
org.quartz.dataSource.quartzDataSource.password: ${APP_DATABASE_PASSWORD:-user}
org.quartz.dataSource.quartzDataSource.maxConnections: 5
schedule_overrides:
io.castled.DummyScheduledJob: "0/30 * * * * ?"
io.castled.jarvis.taskmanager.scheduledjobs.TaskRetryJob: "0/30 * * * * ?"
io.castled.jarvis.taskmanager.scheduledjobs.TaskRefreshJob: "0/30 * * * * ?"
代码结构
├── javadoc
│ └── README.md
├── pom.xml
└── src
├── main
│ └── java
│ └── io
│ └── castled
│ └── jarvis
│ ├── JarvisModule.java
│ ├── scheduler
│ │ ├── JarvisGlobalCronJob.java
│ │ ├── JarvisJobFactory.java
│ │ ├── JarvisScheduler.java
│ │ ├── JarvisSchedulerConstants.java
│ │ └── models
│ │ ├── JarvisScheduledJob.java
│ │ └── JarvisSchedulerConfig.java
│ └── taskmanager
│ ├── JarvisClientPool.java
│ ├── JarvisConstants.java
│ ├── JarvisJobFactory.java
│ ├── JarvisRequestsConsumer.java
│ ├── JarvisTasksClient.java
│ ├── JarvisTasksService.java
│ ├── JesqueTasksClient.java
│ ├── TaskExecutor.java
│ ├── daos
│ │ └── JarvisTasksDAO.java
│ ├── exceptions
│ │ ├── JarvisDeferredException.java
│ │ ├── JarvisException.java
│ │ ├── JarvisRetriableException.java
│ │ ├── JarvisRuntimeException.java
│ │ └── JarvisTaskInProgressException.java
│ ├── models
│ │ ├── JarvisKafkaConfig.java
│ │ ├── JarvisTaskClientConfig.java
│ │ ├── JesqueTaskParams.java
│ │ ├── RetryCriteria.java
│ │ ├── Task.java
│ │ ├── TaskGroup.java
│ │ ├── TaskPriority.java
│ │ ├── TaskStatus.java
│ │ └── requests
│ │ ├── JarvisRequest.java
│ │ ├── JarvisRequestType.java
│ │ ├── TaskCreateRequest.java
│ │ ├── TaskDeferralRequest.java
│ │ ├── TaskFailureRequest.java
│ │ ├── TaskStatusUpdateRequest.java
│ │ └── TaskSuccessRequest.java
│ ├── scheduledjobs
│ │ ├── JarvisTaskRefreshJob.java
│ │ └── JarvisTaskRetryJob.java
│ └── utils
│ └── JarvisUtils.java
└── test
└── java
└── io
└── castled
├── JarvisService.java
└── TasksDAO.java
代码简单说明
scheduler 主要处理基于quartz的调度处理(定时型的,比如定时清理,定时处理重试任务)
taskmanager 主要处理短时的,比如数据分发任务,任务状态标记的,配合上scheduler类似与总控
taskmanager 类似与小领导,管理一些琐碎任务的
主要暴露的guice 模块
public class JarvisModule extends AbstractModule {
@Override
protected void configure() {
bindGlobalScheduledJobs();
}
private void bindGlobalScheduledJobs() {
Multibinder<JarvisGlobalCronJob> multiBinder = Multibinder.newSetBinder(binder(), JarvisGlobalCronJob.class);
multiBinder.addBinding().to(JarvisTaskRefreshJob.class);
multiBinder.addBinding().to(JarvisTaskRetryJob.class);
}
}
task 任务数据处理处理基于类似jdbi 可以参考JarvisTasksDAO
JarvisTasksService 是任务处理的核心,基于jesque包装的常用的task 处理
taskservice 提供了一个方便的client,包装了task服务的操作,为其他模块调用提供了方便
说明
Castled jarvis 模块代码并没有多大的难度,主要是利用了几个开源的框架,进行task 的管理,以上是一个简单的说明,后续会结合connector 详细说明使用
我们只有结合具体如果使用jarvis才能更好的了解jarvis的作用
参考资料
https://github.com/gresrun/jesque
https://github.com/resque/resque
https://github.com/castledio/castled