weixin_40455124
这个作者很懒,什么都没留下…
展开
-
liteflow 2.10 配置中心简单记录
以上代码chainConfig和 item 都是Apollo sdk的类,liteflow使用的Apollo client是1.7.0.以下为Apollo配置说明,etcd/zk类似。script 要注意KEY是。chain的解析代码如下。原创 2023-07-26 21:05:22 · 345 阅读 · 0 评论 -
liteflow 2.10.5 annotation 使用
通过使用annotation 可以简化代码开发并且把相关node放到一个java 文件中,及可以在一个java 类定义(多个)整个chain的node及方法。annotation 的支持的method定义在 public enum LiteFlowMethodEnum中。具体可以参考liteflow-testcase-el-declare-multi-springboot,原创 2023-07-22 11:41:24 · 158 阅读 · 0 评论 -
liteflow 2.10.5 script node使用
liteflow script 的node 上language可以不写,但建议都明确指明script language,尤其是多script 的使用场景,原因是从以下代码可以看出NONE对应的scriptExcutor 是依赖service load顺序决定的,容易混淆和出错。注意 通过maven增加对应script plugin 依赖。liteflow SCRIPT NODE定义可以参考如下。原创 2023-07-22 11:36:23 · 503 阅读 · 0 评论 -
liteflow overall笔记
偶然看到liteflow的介绍,感觉是一个local单机版本的conductor。非常好的一个国产开源原创 2023-07-22 11:20:13 · 119 阅读 · 0 评论 -
conductor 3.13 fork 和dynamic fork 分析
然后要注意FORK_JOIN_DYNAMIC 的dynamicTasks及dynamicTasksInput。join task 无需定义 joinOn,默认会汇聚所有dynamic task的结果。fork -join 不复杂,在join的时候有些要注意。注意下join是有输出的,会自动汇聚joinOn的结果。Dynamic Fork 的tasks可以分为3个。以下为一个fork的workflow定义。执行如下内容输出join的output。可以在join后增加一个task。task 生成示意代码如下。原创 2022-12-14 23:50:42 · 225 阅读 · 0 评论 -
conductor 3.13.2 community 版本连接mysql测试
conductor 从3.8开始将Netflix 外部共享的内容专业到community 下,github 连接为。community 由 https://orkes.io/ 维护。community下主要包括1、数据库,MYSQL及PG支持3、外部payload,pg及aws bolb5、es7 支持7、metric。原创 2022-12-11 17:50:27 · 773 阅读 · 0 评论 -
Conductor 3.13.2 SystemTask执行过程初步分析
slot 数量配置在ConductorProperties 类(可用通过conductor.app前缀配置)注意kafka publish 已经转到community 里面了。默认是示意共享池,slot=cpu*2。原创 2022-12-11 17:42:05 · 461 阅读 · 0 评论 -
conductor ui 查不到在途的workflow
测试过程中发现conductor ui 存在查不到在途的workflow,log有如下输出。使用8080 console 可以处理。原创 2022-12-11 17:21:08 · 169 阅读 · 0 评论 -
conductor http 超时设置
修改后即可,这个时间限制也符合conductor system task不能用于长耗时场景的设置。原创 2022-12-11 17:12:26 · 139 阅读 · 0 评论 -
conductor cluster server decision处理冲突解决方法
本文没有进行测试,只是根据文档进行分析记录:主要方式有1、使用localOnly2、 使用不同conductor.redis.queueNamespacePrefix3、使用lock,注意3.8开始不支持zookeeper lock,即只能使用redis lock,redis lock支持sentinel 和single node两种模式。Considering a situation where a conductor instance goes down: * With local-only st原创 2022-12-04 16:56:10 · 266 阅读 · 0 评论 -
conductor 3.7以上 jedisCommands ArrayIndexOutOfBoundsException 解决分析
在conductor 新版本(3.7和3.12)server 测试过程中都出现如下错误这个问题出现下spring boot bean初始化过程中,没有明确的提示,只能使用debug进行一步步的跟踪首先判断是如下代码出现问题经过漫长跟踪,最后发现是dyno的问题,在HostUtils.java 的calculateReplicationFactorForDC函数有如下代码这段代码没有判断uniqueCounts 是否为空,结合前面的for 语句可以知道是datacenter设置有问题。server下的a原创 2022-12-04 16:50:30 · 295 阅读 · 0 评论 -
conductor 3.13.2 win10 idea 编译
conductor 3.13.2 win10 idea 编译 简单记录如下(不含UI).原创 2022-12-04 16:20:09 · 185 阅读 · 0 评论 -
dolphinscheduler sql 上下游参数传递
dolphinscheduler 实现shell、sql、Procedure间的参数传递,简单总结一下。原创 2022-11-11 06:53:38 · 2567 阅读 · 0 评论 -
dolphinscheduler 3.0 集成minio
dolphinscheduler 3.0使用 3.8的docker-compose ,需要使用profile模式启动,这点与1.X不同,要求 Docker Compose 1.28.0+。dolphinscheduler 3.0 集成minio 的bucket 名称很容易让人认为还不成熟。默认需要按官网模式,先进行scheme初始化。就可以,当然minio 用户如不是默认的,修改。从代码看,这个名称是写死了,无法通过配置修改。这个默认名称来自以下代码。S3的工具函数代码如下。原创 2022-09-23 20:38:25 · 994 阅读 · 0 评论 -
dyno-queue ack时间控制
使用dyno-queue 要注意ack时间,如果在规定时间没有ack,那么pop出来的数据会重新返回队列,可以再次pop。设置ack时间代码如下, /** * @param clock Time provider * @param quorumConn Dyno connection with dc_quorum enabled * @param nonQuorumConn Dyno connection to local Redis * @param r原创 2021-12-18 05:56:49 · 218 阅读 · 0 评论 -
Bug 导致 DynoQueue - cannot add XX to the unack shard
DynoQueue POP的时候有时候会出现cannot add XX to the unack shard。经过分析,有一种场景是由于queue的数据不足,而以下代码会导致id重复获取并进行多次获取数据导致。POP函数取ID核心代码如下:prefetchIds(); while (prefetchedIds.size() < messageCount && ((clock.millis() - start) < waitFor)) {原创 2021-12-18 05:05:02 · 373 阅读 · 0 评论 -
conductor failureWorkflow 简单记录
failureWorkflow 和普通workflow有以下不同completed 后不能重试有如下默认输入参数源工作流的输入参数源工作流ID失败原因失败状态具体可以参考以下代码: if (!StringUtils.isBlank(failureWorkflow)) { Map<String, Object> input = new HashMap<>(workflow.getInput());原创 2021-12-13 23:00:52 · 255 阅读 · 0 评论 -
conductor 3.2.0 里dyno-queue ShardSupplier 及tokenMapSupplier实现分析
核心类为public class RedisCommonConfigurationShardSupplier核心代码如下:@Bean public ShardSupplier shardSupplier(HostSupplier hostSupplier, RedisProperties properties) { if (properties.getAvailabilityZone() == null) { throw new ProvisionExc原创 2021-12-11 19:15:28 · 330 阅读 · 0 评论 -
dyno-queue shard对push及pop的影响
dyno-queue (基于2.0.22)提供V1/V2两种queue管理,无论哪种都需要注意如果连接的dynomite归属不同Shardpush 是 将批量数据发送到不同shard,即不同队列中的pop 只取localrack 对应的shard中数据PUSH/POP分析因此如果有多个shard,默认pop是只能取到部分数据的,如果local rack没有找到对应shard,pop会报错,即需要注意以下启动参数:-DLOCAL_RACK=rack1-dc1 -DLOCAL_DATACENTER原创 2021-12-11 15:32:21 · 343 阅读 · 0 评论 -
conductor workflow-status-listener 配置
conductor workflow-status-listener 原生提供了三种\conductor-3.2.0\contribs\src\main\java\com\netflix\conductor\contribs\listener\archive\ArchivingWorkflowListenerConfiguration.java: 22 @Configuration 23 @EnableConfigurationProperties(ArchivingWorkflowLis原创 2021-12-01 23:05:45 · 517 阅读 · 0 评论 -
CONDUCTOR_CONFIG_FILE 指定配置文件
conductor server可以通过CONDUCTOR_CONFIG_FILE 环境变量指定配置文件。具体实现逻辑代码如下: /** * Reads properties from the location specified in <code>CONDUCTOR_CONFIG_FILE</code> * and sets them as system properties so they override the default properties.原创 2021-12-01 20:02:23 · 248 阅读 · 0 评论 -
conductor 执行失败日志会默认进入es
执行失败目录会进入conductor_task_log*,但createtime默认会识别为number而不是日期,具体如下图:原创 2021-12-01 20:00:02 · 170 阅读 · 0 评论 -
conductor 使用动态延迟启动task
conducto可以使用startDelay延迟启动task,参考:How do you schedule a task to be put in the queue after some time (e.g. 1 hour, 1 day etc.)After polling for the task update the status of the task to IN_PROGRESS and set the callbackAfterSeconds value to the desired tim原创 2021-12-01 05:08:22 · 314 阅读 · 0 评论 -
conductor 的archive 只是删除记录
默认的是删除数据,不备份,具体可以参考以下代码 @Override public void run() { try { this.executionDAOFacade.removeWorkflowWithExpiry(workflowId, true, archiveTTLSeconds); LOGGER.info("Archived workflow {}", workflowId);原创 2021-12-01 04:57:25 · 246 阅读 · 0 评论 -
conductor restart和rerun机制
conductor 重跑任务有2种模式restart,重头跑整个workflow 可以在ui进行,可以选择最新或者原始生成workflow的工作流定义版本,示意URL如下:http://192.168.XXX.XXX:5000/api/wfe/restart/3f068bd0-99a4-45bd-976b-1fdd0eaaad6c?useLatestDefinitions=false还可以从指定task 重跑,需要先获取对应task的id,这种模式可以修改workflow及task的input原创 2021-11-29 22:09:32 · 314 阅读 · 0 评论 -
conductor 3.13.2 的InProgressLimit及RateLimit实现分析
RateLimit只在redis模式下支持,以Redis为例分析InProgressLimit及RateLimit实现。InProgressLimit存放在TASKS_IN_PROGRESS_STATUS中,核心包括修改task时候根据状态使用 jedisProxy.sadd(nsKey(TASKS_IN_PROGRESS_STATUS, task.getTaskDefName()), task.getTaskId()); 或者 jedisProxy.srem(nsKey(TASKS_IN_PR原创 2021-11-18 23:40:12 · 375 阅读 · 0 评论 -
Conductor sweep 机制
先看核心代码 public void sweep(String workflowId) { try { WorkflowContext workflowContext = new WorkflowContext(properties.getAppId()); WorkflowContext.set(workflowContext); LOGGER.debug("Running sweeper for workflow原创 2021-11-05 22:41:06 · 124 阅读 · 0 评论 -
conductor task queue pop及push
pop及push在conductor 可以理解为获取要执行的task、生产待执行的task。核心类是QueueDAO的实现类,如MySQLQueueDAO extends MySQLBaseDAO implements QueueDAO。POP分析pop相对简单,dao的核心代码(以mysql为例)private List<Message> popMessages(Connection connection, String queueName, int count, int timeou原创 2021-11-05 22:35:24 · 343 阅读 · 0 评论 -
conductor 的isolationGroup及executionNameSpace 实际不可用
初步分析conductor 的isolationGroup及executionNameSpace 实际不可用。首先poll 获取对应queue名称时候,isolationGroup及executionNameSpace都是传递null的。 public List<Task> poll(String taskType, String workerId, String domain, int count, int timeoutInMilliSecond) { if (tim原创 2021-11-02 23:31:57 · 159 阅读 · 0 评论 -
conductor 连接es invalid internal transport message format
conductor 连接es6 会有io.netty.handler.codec.DecoderException: java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)339083 [elasticsearch[_client_][transport_worker][T#10]] WARN org.elasticsearch.transport.TcpTranspo原创 2021-11-02 22:21:36 · 1636 阅读 · 0 评论 -
conductor使用es,需要保障es状态为green
在开发环境,单机es时候出现如下错误Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'es6IndexDAO': Invocation of init method failed; nested exception is org.elasticsearch.client.ResponseException: method [GET], host [http:/原创 2021-10-30 23:59:06 · 376 阅读 · 0 评论 -
eclipse 下编译conductor grpc 代码生成记录
eclipse 下编译conductor需要生产 grpc java代码,否则启动server 会报告conductor-grpc-server 相关bean失败错误。首先修改conductor-grpc的build.gradle文件如下buildscript { dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.15' }}plugins { id 'java'原创 2021-10-30 23:56:11 · 215 阅读 · 0 评论 -
conductor 的concurrentExecLimit及rateLimit 实现分析
conductor 的concurrentExecLimit及rateLimit 的核心逻辑在ExecutionService 的如下代码中:public List<Task> poll(String taskType, String workerId, String domain, int count, int timeoutInMilliSecond) { ... for (String taskId : taskIds) { try原创 2021-10-30 23:49:55 · 180 阅读 · 0 评论 -
conductor decide核心代码分析
核心执行类都在package com.netflix.conductor.core.execution下,decide的关键代码包括public class WorkflowExecutor 的decide函数public class DeciderService 的decide函数WorkflowExecutor 的decide函数会调用DeciderService 的decide函数,代码如下 /** * @param workflowId ID of the workflow to ev原创 2021-10-12 05:19:25 · 264 阅读 · 0 评论 -
javascript 在conductor的使用
conductor 使用javax自带的JavaScript,实现类如下:package com.netflix.conductor.core.events;import javax.script.Bindings;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class ScriptEvaluator {原创 2021-10-10 17:27:20 · 179 阅读 · 0 评论 -
conductor client 代码快速分析
conductor client 比较简单,包括以下两个子项目1、client2、client-springclient-spring是spring boot实现。从以下spring boot核心类可以看到做什么public class ConductorClientAutoConfiguration { @Autowired(required = false) private EurekaClient eurekaClient; @Autowired(required原创 2021-10-10 13:18:59 · 297 阅读 · 0 评论 -
conductor server配置项目
conductor server配置项目说明是分散在各个additional-spring-configuration-metadata.json 及类ConductorProperties 中。可以使用 find . -name additional*.json |grep -v build|xargs cat >>all-additional.json及查看@ConfigurationProperties(“conductor.app”)public class ConductorP原创 2021-10-10 12:05:40 · 296 阅读 · 0 评论 -
pollForDecisionTask timeout分析
在运行cadence demo的时候遇到如下错误 - exceptionorg.apache.thrift.transport.TTransportException:Request timeout after 30004ms2021/09/19-03:06:44[Sticky Task Poller: 2]ERROR Caller+0 at com.uber.cadence.serviceclient.WorkflowServiceTChannel.pollForDecisionTask(Workf原创 2021-09-26 07:21:21 · 211 阅读 · 0 评论 -
uber cadence 的ip获取分析及修改
微服务编排引擎Cadence是什么,可以点链接查看。cadence java sdk启动的时候默认的ip是不能指定的,在有多ip的时候可能有问题。cadence的默认ip获取是按一个简单的内部算法来实现的:public static int scoreAddr( NetworkInterface iface, InetAddress addr) { int score = 0; if (addr instanceof Inet4Address) {原创 2021-09-19 16:23:23 · 282 阅读 · 0 评论 -
cadence Unknown workflow type及taskList与worker关系
如果一个woker在registerWorkflowImplementationTypes 没有将同样tasklist name,即同一tasklist下所有Workflow 进行register,可能出现如下错误:2021/09/30-02:55:15[Workflow Executor taskList="HelloCancellation", domain="samples-domain": 1]ERROR Caller+0 at com.uber.cadence.internal.replay.原创 2021-09-30 03:02:54 · 220 阅读 · 0 评论