问题标签 [workflow-engine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - java - 除了switch case和if/else之外,如何在java中实现许多条件?
需要实现一个要求,如果使用 switch case 或很多 if/else 实现,代码流将根据很多情况来决定!
要实现的示例代码:
除了 if/else 语句或 switch 案例之外,还有更好的方法来编写此类案例吗?
类似于工作流引擎的内部实现的东西,jBPM
但我实际上不能包含工作流引擎,因为它使应用程序变得繁重!
任何建议表示赞赏!
apache - 如何将 activiti 工作流引擎与 Vertx 集成?
在我们的项目中,我们使用 Vertx并希望使用工作流引擎处理我们的请求,因为我们的请求中有不同的任务。
我浏览了activiti WFE,但只找到了 spring 集成示例。
如何将它与 Vertx 集成?
json - 具有 React 或 Angular 8 和 typescript 的集成 Rest API (json) BPMN
我需要一个带有 typescript 的 angular 或 react bpmn 库,而 rest api 服务不是 xml 或其他任何东西。也不想将 xml 解析为 json。
对此进行了很多搜索,但我看到了很多限制并且找不到带有 json 服务的 bpmn 库。
我需要通过 json 与后端和 typescript 进行通信的 react 或 angular来制作这样的工作流。
recommendation-engine - 规则引擎 VS 工作流引擎
我想知道规则引擎和工作流引擎有什么区别。就我而言,我必须自动化票务系统的一些规则。事实上,每张工单都有一个工作流程(打开 -> 进行中 -> 已解决 -> 已关闭)。
python - 使用 XCOM 中任务的 JSON 表示在 Airflow 中运行时/动态生成任务
我正在评估像 Airflow 这样的框架,它能够在运行工作流时在运行时构建任务的动态图,即在开始工作流之前我不具体了解任务及其依赖关系,我只知道图的级别数。
我开始使用 Airflow,我正在使用 XCom 来保持图表的状态,如下所述: Proper way to create dynamic workflows in Airflow
我还通过在 XCom 行中存储包含任务依赖关系描述的 JSON 片段来扩展这种方法,例如:
请注意,我真的不需要重新运行我的 DAG:我的 DAG 是要在外部安排的,一旦我的第一个 DagRun 完成,之后将不会删除/删除/修改任何新任务。如果需要重新运行,我将创建一个新的 DAG。
我使用的技术如下:我用两个任务创建 DAG,一个是传感器(这保证了 DagRun 始终处于运行状态直到结束)
当传感器推送代表任务及其依赖项的 JSON 文件(这些文件不断出现在一个文件夹中)时,我尝试在 DAG 代码中从 XCom 中提取任务。
我的问题是:Airflow 是这种用例的有效工具吗?或者我是否将其与主要用例相距甚远(即在运行时未生成静态任务的固定工作流)?
这种方法是否可以扩展到数万个 DAG 和数十万个任务?或者是否有任何其他类似的工具可以以更简单的方式实现这一目标?
automation - 什么是协调长时间运行的部署窗口工作流的最佳工具,重点是人工任务
简短的
我期待有关有助于管理主要维护窗口的工具集的建议和经验分享。这个问题的具体内容是关注人工任务(而不是完全自动化的流程)以及拥有丰富 UI 的需求。
问题陈述
如果您通过关键字“BPMN”、“工作流引擎”、“编排”、“任务管理”来搜索软件,您会发现许多解决方案,其中大多数都集中在自动化、编排、业务编排、IT 流程、通常与网络(SDN/VNF 域)和微服务世界中的编排有关,kubernetes/openshift。
但是,如果您想扮演一个“乐队大师”,一个以人为中心的人工任务编排的促进者,以应对长期运行和复杂流程的所有挑战,该怎么办?而且你的团队真的很大,而且路很长。这没有很好地涵盖,或者我正在努力寻找最匹配的内容。
寻求有关此主题的建议。
简化示例
假设我是一名主持人,有一个步骤列表,它可能是纯文本清单或类似 Excel 的形式,甚至是 Microsoft Project 计划。我有一个 100 人的团队,正在等待我的直接指示,例如“嘿,尼克,根据我的任务清单,你的步骤的所有前辈都已完成,现在你可以开始你的任务#xyz,请继续报告对我来说一旦完成”。然后尼克开始做他的工作 - 可能是手动步骤,或者可能开始一些自动化任务,如脚本。与此同时,Mary 可以尽自己的一份力,而其他人则按计划加入。
我需要控制面板或仪表板(监控、日志记录、跟踪)+ Cockpit(操作、干预)之类的东西,所以我清楚地了解谁在做什么,并确保事情按正确的顺序进行,我们都在轨道上. 有什么我不知道的,可能像 Jira + Kanban + Jenkins + "Living MS Project" 这样可以满足下面指定的所有要求?
挑战
我需要执行一个长时间运行(长达 24 小时)的部署窗口(软件维护/交付/推出),并面临以下挑战:
- 涉及许多不同的团队(IT、DBA、网络等);
- 可能来自不同的组织(供应商、客户、承包商等……);
- 通常整个窗口总共有 50-100 多人,轮班工作;
- 多种通信渠道(电子邮件、即时消息、短信、电话、作战室)
- 交付包本身的复杂结构(许多模块、依赖项、正确的安装顺序是关键任务),需要不同的程序
- 总体计划非常庞大 - 500 多个原子步骤,混合了人工任务和自动操作
- 任务可以按顺序进行,也可以并行进行,具有复杂的依赖关系和限制
- 任务可以分组,所以流程应该支持子流程模型
- 支持重试/回滚/故障转移过程
- 等等……</li>
关于 UI/可视化的一些额外的好功能
- 进度的可视化(“我们现在在哪里”),直到预测剩余时间,等等……很好的浇头;
- 临时报告(到目前为止观察到的问题列表,以及解决方案(如果有)或与票务系统的链接,我们是提前还是落后于计划,其他一些指标),导出;
- 漂亮而丰富的 UI 将非常受欢迎和有用:放大/缩小/概览、折叠/扩展部分;
- 导航和搜索、标记和标签;
- 状态,针对就地任务的行动;
- 不同的表示类型:树、表格、甘特图、普通模式。
目前我在网上找到的解决方案和建议:
企业级平台:
- Windows 工作流基础
- IBM 云编排
- 谷歌云工作流
- ...
开源(免费和付费)+ 他们的扩展(附加组件):
- 阿帕奇气流;
- 优步节奏/时间;
- Camunda/Zeebe(Camunda 的“人工工作流用例”);
- Pegasus、Prefect、StackStorm 和许多其他通过关键字“BPMN”、“工作流引擎”、“编排”、“任务管理”甚至“以人为本”(imixs-workflow)找到的;
- ...
考虑内部工具开发的建议,可能基于开源,可能使用分叉,但最好选择那些允许扩展/插件,可定制架构的工具
python - 任务不运行 Luigi
我编写了一段简单的代码来运行 Luigi 中的任务。代码如下:
期望:我想运行TaskA,但TaskA需要TaskB和TaskC - > TaskB和TaskC应该在两个任务B,C完成之前和首先运行,然后TaskA可以运行
实际:仅 TaskA 运行。其他任务没有。登录控制台:
我曾经运行的命令:
python first_luigi_app.py --local-scheduler TaskA
我不知道我是否错过了一些东西!如果有人可以提供帮助将不胜感激:)
bpmn - 在 Camunda 上下文中存储和访问嵌套结构
我们当前存储在 Camunda 上下文中的数据由嵌套的 java.util.Maps 组成。以下是我们如何将消息关联到引擎,以及传递上下文:
我们目前面临的问题是如何只更新部分上下文。假设在一个正在运行的进程中,我们有以下上下文:
[:]
语法意味着地图。根据我们阅读的内容,库存将作为 LOB 存储在数据库中。有没有办法只更新这个 LOB 的一部分?例如,通过将消息与变量相关联,将百事可乐的数量减少到 1 inventory: [pepsi: ["quantity": 1]]
。有效地执行合并而不是替换。有没有办法自定义上下文的更新方式?
我们发现的一种解决方案 1) 或解决方法是展平地图,以便上下文如下所示:
在这种情况下,我们只能直接替换inventory.pepsi.quantity。但是,这带来了以下缺点:
- 每个正在运行的进程的数据库负载更多,因为每个变量都是单独的行
- BPMN 中变量的使用更加笨拙,因为我们不能再直接使用inventory.pepsi.price,而必须调用execution.getVariable('inventory.pepsi.price')。
作为一种改进,我们可以引入一个自定义函数,比如说 c,并在表达式中调用它 - ${c('inventory').pepsi.price > 10
。这样我们可以保持一个扁平化的上下文,就像在解决方案 1) 中一样,但至少使 bpmn 的使用稍微容易一些。当然,所需的表达式只是${inventory.pepsi.price}
.
PS。从 Camunda论坛回复,希望能获得更多关于这个问题的知名度。