广播执行表示一个任务实例会广播到该分组所有Worker上执行,当所有Worker都执行完成,该任务才算完成。任意一台Worker执行失败,都算该任务失败。
应用场景
- 批量运维
- 定时广播所有机器运行某个脚本。
- 定时广播所有机器清理缓存。
- 数据聚合
- 使用JavaProcessor、preProcess的时候重置数据库count=0。
- 每台机器执行process的时候,根据自己机器内存或者日志的值,在数据库对count进行叠加。
- postProcess的时候,读取数据库count值,传递给下游。
任务类型
任务类型可以选择多种,例如脚本或者Java任务。如果选择Java任务,还支持preProcess和postProcess高级特性。
使用Java任务需要继承JavaProcessor(1.0.7及以上版本),接口如下:
public ProcessResult process(JobContext context) throws Exception
public void preProcess(JobContext context)
public ProcessResult postProcess(JobContext context)
preProcess会在所有机器执行process之前执行,且只会执行一次。
postProcess会在所有机器执行process且都成功执行之后执行一次,可以返回结果,作为工作流数据传输。
代码示例
@Component
public class TestBroadcastJobProcessor extends JavaProcessor {
@Override
public ProcessResult process(JobContext context) throws Exception {
System.out.println("this is process");
return new ProcessResult(true);
}
@Override
public void preProcess(JobContext context) {
System.out.println("this is preProcess");
}
@Override
public ProcessResult postProcess(JobContext context) {
System.out.println("this is postProcess");
return new ProcessResult(true, "hello broadcast");
}
}
如以上代码所示,启动三台机器,执行结果如下:
- Worker 1
this is preProcess this is process this is postProcess
- Worker 2
this is process
- Worker 3
this is process