0

有没有办法将自定义状态(字符串值)附加到/从正在运行的 Zeebe 工作流中获取?

示例:考虑 Zeebe 中的规范收费信用卡工作流程。

开始 -> ChargeCreditCard(服务任务) -> 结束

ChargeCreditCard 任务被建模为 nodejs 工作应用程序正在侦听主题的外部任务。假设这个 nodejs 应用程序需要 1 分钟来执行和完成,我想定义/附加 2 个自定义状态名称到这个模型。

状态#1.charge-credit-card(1 分钟前) 状态#2.credit-card-charged-successfully(1 分钟后)

因此,如果有人通过 zeebe rest api 检索正在运行的工作流实例的状态,他们会在执行前获得状态#1,并在 nodejs 工作人员完成后 1 分钟后获得状态#2。

我的问题是使用标准 BPMN 对象在 Zeebe 中执行此操作的本地方法。如果没有,是否有任何解决方法可以实现相同的目标。

4

2 回答 2

2

我认为可以通过强调出于可扩展性目的而设计不支持查询工作流状态来改进先前的答案。因此,您甚至不应该查询 zeebe 代理/引擎的内部状态,而是让它单独处理自己的状态,而您将自己限制为仅处理 zeebe 代理发布或异步导出的关于其状态的工件。

我不同意的是,将 BPMN 与没有功能意义的服务工作者混为一谈,但可以作为技术变通办法来实现一些你甚至不应该首先追求的目标。因为,根据定义,这违背了使用 BPMN 来阐明和编排流程的目的。

我现在正在研究并会在一个月左右开源的解决方案,大致如下。- 与 API 服务器和套接字服务器连接的现代 Javascript 用户界面 - 公开 RESTful 接口的 API 服务器,用于创建工作流实例、将数据放入工作流实例等 - 带有 kafka 导出器的 zeebe 安装 - 一个套接字服务器订阅与工作流实例事件相关的 kafka 主题(在我的例子中使用 kafkajs),处理 kafka 消息并通过套接字将处理后的数据发送回 JavaScript 前端应用程序

可以在此处找到基本的概念证明https://gitlab.com/werk-en-inkomen/zeebe-kafka-socket。更整洁、更精细、完全 Docker 化的解决方案将很快推出。

于 2019-09-04T08:28:43.720 回答
1

没有 Zeebe REST API。也没有任何 Zeebe gRPC 查询 API 来检索正在运行的工作流实例的状态(至少在任何支持的生产版本中都不支持 - 它在 0.18 中被删除)。在此功能请求中讨论了有关获取正在运行的工作流的更新:“ Awaitable Workflow Outcomes ”。

所以目前没有办法查询工作流状态。您必须从工作人员那里广播/发送消息。

您可以通过将“Charge Credit Card”服务任务放在子流程中来实现您想要做的事情,并在子流程中放置非中断边界事件计时器以通过服务任务触发状态更新。

于 2019-09-04T04:55:57.450 回答