聊聊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的机器给删除掉。
相关文章:
聊聊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-…...
Android Kotlin知识汇总(三)Kotlin 协程
Kotlin的重要优势及特点之——结构化并发 Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。本主题介绍如何使用 Kotlin 协程解决以下问题,从而让您能够编写出更清晰、更简洁的应用代…...
JVM垃圾收集器-serial.parNew,parallelScavnge,serialOld,parallelOld,CMS,G1
垃圾收集器 分代模型 适用于新生代: serial parNew parallel Scaavenge 适用于老年代: CMS serial Old(msc) paraller Old 分区模型 适用于超大容量: G1 分代模型 serial /serial Old收集器 1.单线程收集器 2.收集时会暂停其他线程&…...
docker搭建upload-labs
Upload-labs 是一个专门设计用于学习和练习文件上传安全的开源工具。它提供了各种场景的文件上传漏洞,供用户通过实践来学习如何发现和利用这些漏洞,同时也能学习到防御措施。使用 Docker 来搭建 upload-labs 环境是一种快速、简便的方法,它可…...
超详细外贸单证汇总!
今天给大家汇总了外贸单证的种类与使用相关知识,东西齐全,赶紧码住! 1、合同 CONTRACT是统称,买卖双方均可出具。如系卖方制作,可称为销售确认书,买方出具则可称为采购。 买卖双方均可出具合同。卖方出具的,可称为销售确认书(Sales Confir…...
Docker部署ChatGLM3、One API、FastGPT
创建并运行chatglm3容器 docker run --name chatglm3 -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/ryyan/chatglm.cpp:chatglm3-q5_1 创建并运行one-api容器 (其中挂载路径 D:\one-api 可以选择你自己喜欢的目录) docker run --name oneapi -d -p 3000:3000 -e TZAsia…...
【Linux-网络编程】
Linux-网络编程 ■ 网络结构■ C/S结构■ B/S结构 ■ 网络模型■ OSI七层模型■ TCP/IP四层模型 ■ TCP■ TCP通信流程■ TCP三次握手■ TCP四次挥手 ■ 套接字:socket 主机IP 主机上的进程(端口号)■ TCP传输文件 ■ 网络结构 ■ C/S结构…...
win10虚拟机安装驱动教程
在虚拟机菜单栏中选择安装VMware Tools: 安装好后,在虚拟机中打开此电脑,双击DVD驱动器进行安装: 一直点击下一步: 安装完成: 此时重启虚拟机,发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…...
SpringBoot实战项目——博客笔记项目
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…...
【海贼王的数据航海】排序——直接选择排序|堆排序
目录 1 -> 选择排序 1.1 -> 基本思想 1.2 -> 直接选择排序 1.2.1 -> 代码实现 1.3 -> 堆排序 1.3.1 -> 代码实现 1 -> 选择排序 1.1 -> 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置&…...
Flutter 的 switch 语句补遗
我的 App 里,一个消息气泡变成空白了,非常奇怪,此前一直是没问题的,经过调试定位我发现: static TextSpan _buildRootSpan(BuildContext ctx, List<LinkifyElement> parts, TextStyle? style) {List<InlineS…...
Linux动态库*.so函数名修改
在某些学习或者特殊需求的情况下要对linux下动态库*.so文件内部的函数名进行修改。 比如一个函数ADD(int a,int b);修改为Add(int a,int b); 通过这篇文章你将了解到在linux下动态库函数名寻址的规则,截止2024年3月linux动态库的寻址规则已经出现多种,这…...
adb shell 指令集
1.connect device连接设备: adb devices #return: List of devices attached 0123456789ABCDEF device2.连接终端 adb shell从设备拷贝文件到本地 adb pull <remote> [local] 如: adb pull /sdcard/demo.txt e:\从到本地拷贝文件到设备 adb push &…...
【电子通识】CH340C与CH340G的区别
在USB转串口电路中,网上买到的模块常常用的到是CH340或是CP2102。 但是CH340也有很多的版本,比如CH340C和CH340G,那么他们到底都有哪些差别。 环境特性 从规格书中可以看出环境特性CH340G是-40度到85度,而CH340C批号不是4开头…...
基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的吸烟检测系统(深度学习+Python代码+PySide6界面+训练数据集)
摘要:本文详细说明了如何利用深度学习开发一个用于监测吸烟行为的系统,并分享了完整的代码实现。该系统采用了先进的YOLOv8算法,同时还使用YOLOv7、YOLOv6、YOLOv5算法,并对它们进行了性能比较,呈现了不同模型的性能指…...
Apache Paimon 使用之 Lookup Joins 解析
Lookup Join 是流式查询中的一种 Join,Join 要求一个表具有处理时间属性,另一个表由lookup source connector支持。 Paimon支持在主键表和附加表上进行Lookup Join。 a) 准备 创建一个Paimon表并实时更新它。 -- Create a paimon catalog CREATE CAT…...
GO语言-切片底层探索(下)
目录 切片的底层数据结构 扩容机制 总结: 练习验证代码 这是切片的底层探索下篇,上篇地址请见:GO语言-切片底层探索(上) 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型,会进行…...
物理隔离条件下,如何安全高效地进行内外网文件导入导出?
内外网文件导入导出通常指的是在内部网络(内网)和外部网络(外网)之间传输文件的过程。这在企业环境中尤其常见,因为内部网络通常包含敏感数据,而外部网络(如互联网)则允许更广泛的访…...
代码随想录 贪心算法-难度题目-区间问题
目录 55.跳跃游戏 45.跳跃游戏|| 452.用最少数量的箭引爆气球 435.无重叠区间 763.划分字母区间 56.合并区间 55.跳跃游戏 55. 跳跃游戏 中等 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大…...
地理数据 vs. 3D数据
在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…...
如何通过智能检测实现微信社交关系的高效管理?
如何通过智能检测实现微信社交关系的高效管理? 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字…...
Zotero Better Notes终极指南:如何在笔记中创建流程图和思维导图
Zotero Better Notes终极指南:如何在笔记中创建流程图和思维导图 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes Zotero Better Notes是一款功能…...
盟接之桥®:当新ERP撞上“紧急接入”,WebEDI如何成为制造业的“救命稻草”?
在制造业的数字化征途中,最令人焦虑的场景之一莫过于:“下游客户(如汽车主机厂)明天就要看EDI对接数据,而你们的全新ERP系统,还在测试环境里试运行。”这绝非危言耸听。在汽车供应链、高端装备制造等领域&a…...
qmcdump:QQ音乐加密文件解码的跨平台解决方案指南
qmcdump:QQ音乐加密文件解码的跨平台解决方案指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 问题引入&…...
Claude Code 宠物彩蛋来袭:/buddy 完整玩法指南(整理了宠物刷取方法,重置并刷到你想要的宠物)
文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 Claude Code /buddy 宠物指南 📒 📝 初识 Buddy 🎯 原理解析 🎯 预热窗口期 📝 如何触发 Buddy 🐙 18种宠物图鉴:你的伙伴是哪一位 📝 稀有度系统:1%传说级的诱惑 📝 五维属性:你的宠物是什么性格 📝 成…...
如何组合seo关键词
如何组合SEO关键词 在当今的数字营销环境中,如何组合SEO关键词成为了每一个网站运营者的首要任务。这不仅决定了网站的可见度,还直接影响到流量和最终的转化率。本文将详细探讨如何组合SEO关键词,以实现最佳的搜索引擎优化效果。 什么是SEO…...
gui 的高清与标清
现在无论对图层设计多样化 一般采用4层 或者更多:/*** file display_config.h* brief 显示配置头文件 - 定义图层管理和显示参数* details 采用4层图层设计,支持高清/标清自适应*/ #ifndef DISPLAY_CONFIG_H #define DISPLAY_CONFIG_H #include &l…...
MCP23017按键矩阵驱动库:嵌入式I²C GPIO扩展与中断控制
1. 项目概述MentorBitMatrizPulsadores 是一款专为 MentorBit 兼容硬件平台设计的嵌入式驱动库,核心目标是简化基于 MCP23017 IC GPIO 扩展器的按键矩阵(Keypad Matrix)控制与状态读取。该库并非从零实现底层 IC 通信协议,而是构建…...
别急着升级Win11 24H2!先看看这10个必做的性能调优(附保姆级截图)
别急着升级Win11 24H2!先看看这10个必做的性能调优(附保姆级截图) 每次Windows大版本更新都像开盲盒——有人欢呼性能飞跃,有人抱怨卡顿加剧。24H2作为微软首个深度整合AI能力的年度更新,系统底层调度逻辑发生了显著变…...
嵌入式开发中的模块化编程与驱动分离实践
1. 模块化编程与驱动分离的核心价值在嵌入式开发领域,模块化编程早已不是新鲜概念。我第一次真正体会到它的威力是在2016年参与某新能源汽车BMS(电池管理系统)开发时。当时团队里有8个工程师同时开发不同功能模块,如果没有严格的模…...
