maxRetryTimes
Task 的最大重试次数
currentRetryTimes
Task 的当前重试次数 , 和 maxRetryTimes 联合起来可以判断当前是否为该 Task 的最后一次运行机会
subTask
子 Task , Map/MapReduce 处理器专属,开发者调用map方法时传递的子任务列表中的某一个
omsLogger
在线日志,用法同 Slf4J,记录的日志可以直接通过控制台查看 , 非常便捷和强大!不过使用过程中需要注意频率 , 滥用在线日志会对 Server 造成巨大的压力
userContext
用户在 PowerJobWorkerConfig 中设置的自定义上下文
workflowContext
工作流上下文,更多信息见下方说明
工作流上下文( WorkflowContext )该属性是 v4.0.0 版本的重大变更之一,移除了原来的参数传递机制,提供了 API 让开发者可以更加灵活便捷地在工作流中实现信息的传递 。
属性名称
意义/用法
wfInstanceId
工作流实例 ID
data
工作流上下文数据,键值对
appendedContextData
当前任务向工作流上下文中追加的数据 。在任务执行完成后 ProcessorTracker 会将其上报给 TaskTracker,TaskTracker 在当前任务执行完成后会将这个信息上报给 server,追加到当前的工作流上下文中,供下游任务消费
上游任务通过 WorkflowContext#appendData2WfContext(String key,Object value) 方法向工作流上下文中追加数据,下游任务便可以通过 WorkflowContext#fetchWorkflowContext() 方法获取到相应的数据进行消费 。注意,当追加的上下文信息的 key 已经存在于当前的上下文中时 , 新的 value 会覆盖之前的值 。另外,每次任务实例追加的上下文数据大小也会受到 worker 的配置项 powerjob.worker.max-appended-wf-context-length 的限制 , 超过这个长度的会被直接丢弃 。
返回值 ProcessResult方法的返回值为 ProcessResult , 代表了本次 Task 执行的结果,包含 success 和 msg 两个属性,分别用于传递 Task 是否执行成功和 Task 需要返回的信息 。
处理器开发示例单机处理器:BasicProcessor单机执行的策略下,server 会在所有可用 worker 中选取健康度最佳的机器进行执行 。单机执行任务需要实现接口 BasicProcessor , 代码示例如下:
/** * @Author iron.guo * @Date 2023/1/7 * @Description */@Component@Slf4jpublic class StandaloneProcessor implements BasicProcessor {@Overridepublic ProcessResult process(TaskContext context) throws Exception {OmsLogger omsLogger = context.getOmsLogger();omsLogger.info("处理器启动成功,context 是 {}.", context);log.info("单机处理器正在处理");log.info(context.getJobParams());omsLogger.info("处理器执行结束");boolean success = true;return new ProcessResult(success, context + ": " + success);}}执行结果
文章插图
广播处理器:BroadcastProcessor广播执行的策略下 , 所有机器都会被调度执行该任务 。为了便于资源的准备和释放,广播处理器在BasicProcessor 的基础上额外增加了 preProcess 和 postProcess 方法,分别在整个集群开始之前/结束之后选一台机器执行相关方法 。代码示例如下:
@Slf4j@Componentpublic class BroadcastProcessorDemo implements BroadcastProcessor {@Overridepublic ProcessResult preProcess(TaskContext context) throws Exception {OmsLogger omsLogger = context.getOmsLogger();omsLogger.info("预执行,会在所有 worker 执行 process 方法前调用");log.info("预执行 , 会在所有 worker 执行 process 方法前调用");// 预执行,会在所有 worker 执行 process 方法前调用return new ProcessResult(true, "init success");}@Overridepublic ProcessResult process(TaskContext context) throws Exception {OmsLogger omsLogger = context.getOmsLogger();// 撰写整个worker集群都会执行的代码逻辑omsLogger.info("撰写整个worker集群都会执行的代码逻辑");log.info("撰写整个worker集群都会执行的代码逻辑");return new ProcessResult(true, "release resource success");}@Overridepublic ProcessResult postProcess(TaskContext context, List<TaskResult> taskResults) throws Exception {// taskResults 存储了所有worker执行的结果(包括preProcess)// 收尾,会在所有 worker 执行完毕 process 方法后调用,该结果将作为最终的执行结果OmsLogger omsLogger = context.getOmsLogger();omsLogger.info("收尾 , 会在所有 worker 执行完毕 process 方法后调用 , 该结果将作为最终的执行结果");log.info("收尾,会在所有 worker 执行完毕 process 方法后调用,该结果将作为最终的执行结果");return new ProcessResult(true, "process success");}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 去台湾旅游要多少钱两个人 去台湾旅游要多少钱
- 引言和摘要的区别
- 如何皈依三宝要多少钱 如何皈依三宝
- 明明都是演丫鬟小姐,以前的主仆关系一目了然,现在的要靠“猜”
- 金丝楠木手串佩戴禁忌 几十块的金丝楠手串是真的吗
- 不会说话的男生要脱单该注意什么事项 不会说话的男生要脱单该注意什么
- 吴千语当众说男友丑,且在上海租房住,林峰口中的PUA是真的吗?
- 请柬怎么写,请柬要怎么写
- Excel要咋才可以画图,在excel中指针变为绘图笔
- cdr排版要如何操作,cdr如何绘制有尺寸的墙
