当前位置: 首页 > news >正文

聊聊powerjob的执行机器地址

本文主要研究一下powerjob的执行机器地址(designatedWorkers)

SaveJobInfoRequest

powerjob-common/src/main/java/tech/powerjob/common/request/http/SaveJobInfoRequest.java

@Data
public class SaveJobInfoRequest {/*** id of the job. set null to create or non-null to update the job.*/private Long id;//....../* ************************** PowerJob-worker cluster property ************************** *//*** Designated PowerJob-worker nodes. Blank value indicates that there is* no limit. Non-blank value means to run the corresponding machine(s) only.* example: 192.168.1.1:27777,192.168.1.2:27777*/private String designatedWorkers;/*** Max count of PowerJob-worker nodes.*/private Integer maxWorkerCount = 0;//......
}    

SaveJobInfoRequest定义了designatedWorkers,用于指定woker节点的地址

JobInfoDO

powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/remote/model/JobInfoDO.java

@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(indexes = {@Index(name = "idx01_job_info", columnList = "appId,status,timeExpressionType,nextTriggerTime"),
})
public class JobInfoDO {@Id@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")@GenericGenerator(name = "native", strategy = "native")private Long id;//....../*** 指定机器运行,空代表不限,非空则只会使用其中的机器运行(多值逗号分割)*/private String designatedWorkers;/*** 最大机器数量*/private Integer maxWorkerCount;//......}    

JobInfoDO定义了designatedWorkers,用于指定运行的机器地址

DesignatedWorkerFilter

powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/worker/filter/DesignatedWorkerFilter.java

@Slf4j
@Component
public class DesignatedWorkerFilter implements WorkerFilter {@Overridepublic boolean filter(WorkerInfo workerInfo, JobInfoDO jobInfo) {String designatedWorkers = jobInfo.getDesignatedWorkers();// no worker is specified, no filter of anyif (StringUtils.isEmpty(designatedWorkers)) {return false;}Set<String> designatedWorkersSet = Sets.newHashSet(SJ.COMMA_SPLITTER.splitToList(designatedWorkers));for (String tagOrAddress : designatedWorkersSet) {if (tagOrAddress.equals(workerInfo.getTag()) || tagOrAddress.equals(workerInfo.getAddress())) {return false;}}return true;}}

DesignatedWorkerFilter会根据jobInfo.getDesignatedWorkers()来进行过滤,在指定机器列表内的返回false,否则返回true

getSuitableWorkers

powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/worker/WorkerClusterQueryService.java

    public List<WorkerInfo> getSuitableWorkers(JobInfoDO jobInfo) {List<WorkerInfo> workers = Lists.newLinkedList(getWorkerInfosByAppId(jobInfo.getAppId()).values());workers.removeIf(workerInfo -> filterWorker(workerInfo, jobInfo));DispatchStrategy dispatchStrategy = DispatchStrategy.of(jobInfo.getDispatchStrategy());switch (dispatchStrategy) {case RANDOM:Collections.shuffle(workers);break;case HEALTH_FIRST:workers.sort((o1, o2) -> o2.getSystemMetrics().calculateScore() - o1.getSystemMetrics().calculateScore());break;default:// do nothing}// 限定集群大小(0代表不限制)if (!workers.isEmpty() && jobInfo.getMaxWorkerCount() > 0 && workers.size() > jobInfo.getMaxWorkerCount()) {workers = workers.subList(0, jobInfo.getMaxWorkerCount());}return workers;}

WorkerClusterQueryService的getSuitableWorkers会为该job选出合适的worker,它会将filterWorker返回true的机器给删除掉

小结

powerjob的执行机器地址(designatedWorkers)用于指定该job运行的worker机器列表,DesignatedWorkerFilter会根据jobInfo.getDesignatedWorkers()来进行过滤,在指定机器列表内的返回false,否则返回true,WorkerClusterQueryService的getSuitableWorkers会为该job选出合适的worker,它会将filterWorker返回true的机器给删除掉。

http://www.lryc.cn/news/318996.html

相关文章:

  • Android Kotlin知识汇总(三)Kotlin 协程
  • JVM垃圾收集器-serial.parNew,parallelScavnge,serialOld,parallelOld,CMS,G1
  • docker搭建upload-labs
  • 超详细外贸单证汇总!
  • Docker部署ChatGLM3、One API、FastGPT
  • 【Linux-网络编程】
  • win10虚拟机安装驱动教程
  • SpringBoot实战项目——博客笔记项目
  • 【海贼王的数据航海】排序——直接选择排序|堆排序
  • Flutter 的 switch 语句补遗
  • Linux动态库*.so函数名修改
  • adb shell 指令集
  • 【电子通识】CH340C与CH340G的区别
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的吸烟检测系统(深度学习+Python代码+PySide6界面+训练数据集)
  • Apache Paimon 使用之 Lookup Joins 解析
  • GO语言-切片底层探索(下)
  • 物理隔离条件下,如何安全高效地进行内外网文件导入导出?
  • 代码随想录 贪心算法-难度题目-区间问题
  • 地理数据 vs. 3D数据
  • Redis删除
  • 力扣细节题:字符串中的最大奇数
  • Unity PS5开发 天坑篇 之 申请开发者与硬件部署01
  • 十四届蓝桥杯省赛Java B组 合并区域
  • SpringBoot高级
  • 机试:偶数分解
  • 一周学会Django5 Python Web开发-Jinja3模版引擎-安装与配置
  • python前端开发
  • web学习笔记(三十三)
  • flask库
  • 专业无网设备如何远程运维?向日葵远程控制能源场景案例解析