1.客户端的任务启动
com.netflix.conductor.client.spring.ConductorClientAutoConfiguration
创建实例时,对应的init的方法为:com.netflix.conductor.client.automator.TaskRunnerConfigurer#init
通过 ScheduledExecutorService 定时的从server端拉取任务
注:每个定义的worker都会有一个独立的线程赋值轮询,即定义的worker越多,创建的轮询线程越多
自定义worker时会继承 com.netflix.conductor.client.worker.Worker
该接口中定义了默认值 1000 ,即,若不指定拉取每秒拉取一次任务
2.拉取任务并执行(核心流程)
com.netflix.conductor.client.automator.TaskPollExecutor#pollAndExecute
其中: com.netflix.conductor.client.telemetry.MetricsContainer#incrementTaskPollCount 会统计该worker的执行数量,
可以通过相关方法获取该类worker的执行数量
2.1 拉取任务
拉取任务的具体接口为 com.netflix.conductor.client.http.TaskClient#pollTask
通过http协议调用 server端的接口 : tasks/poll/{taskType}
2.2 执行任务
worker的执行在独立的线程池中,线程池的大小有配置的 conductor.client.threadCount 控制;
另外,同一时刻一个客户端实例上在执行的task数量不能超过threadCount,参看:
com.netflix.conductor.client.automator.PollingSemaphore#canPoll
执行worker的方法 : com.netflix.conductor.client.automator.TaskPollExecutor#processTask
该方法两个关键逻辑:
- 1.执行worker逻辑
- 2.异常情况的处理
2.2.3 执行worker的逻辑
com.netflix.conductor.client.automator.TaskPollExecutor#executeTask
com.netflix.conductor.client.worker.Worker#execute 就是实现Worker接口时实现的方法
1.异常处理:
其中主要是进行失败重试的逻辑,重试的次数为 updateRetryCount,对应于配置项中 的conductor.client.updateRetryCount,默认3次
最后在com.netflix.conductor.client.automator.TaskPollExecutor#updateWithRetry 中,调用server端接口更新任务数据
调用server端的rest接口更新数据
2.向server更新任务信息
最后也是调用的 com.netflix.conductor.client.automator.TaskPollExecutor#updateWithRetry 方法