Castled 源码解析 - jarvis 模块说明

2022/1/31 17:12:33

本文主要是介绍Castled 源码解析 - jarvis 模块说明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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



这篇关于Castled 源码解析 - jarvis 模块说明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程