• 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

  • 相关阅读:
    application manifest 中的requestedElevationLevel令牌
    【转载】讲故事谈.NET委托:一个C#睡前故事
    Sql Server排名函数
    SQL Server窗口函数的简单使用
    【转载】 [Server Error in Application ] WCF and HTTP Error 404.3 Not Found
    SystemColors.ActiveCaptionText在不同操作系统中的颜色不同
    问题:Cannot execute a program. The command being executed was "C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe"
    【转载】WCF and HTTP Error 404.3 Not Found
    【转载】cross apply & outer apply
    使用foreach来取代其它的循环结构
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/15858243.html
Copyright © 2020-2023  润新知