根据信号恢复Cadence工作流,而不会阻塞线程

时间:2020-06-17 07:08:48

标签: cadence-workflow temporal-workflow

我们要构建一个工作流,该工作流按该顺序包含以下步骤

  1. 执行一些同步活动。
  2. 通过kafka事件触发外部操作。
  3. 收听kafka事件以获取操作结果。
  4. 根据结果执行其他一些活动。

Kafka可能包含与工作流程无关的事件,因此我们需要一个单独的工作流程来为该特定工作流程过滤事件。

我打算使用节奏将其分为两个工作流程

  • 工作流程1:1-> 2->等待信号-> 4
  • Workflow2:3->调用workflow1.signal

是否可以在工作流1中等待信号而没有实际阻塞线程,以便线程可以同时处理另一个工作流。

2 个答案:

答案 0 :(得分:1)

我认为对时间/节奏的工作方式存在一些误解。无需为其他工作流不阻塞线程就可以取得进展。工人实例将不会遇到任何问题。

因此,我建议阻塞工作流中的线程以等待信号,因为这是解决业务需求的最简单方法。

作为旁注,我不明白为什么您需要第二个工作流程。不需要工作流程来过滤Kafka事件。您可以直接在发出第一个工作流程信号的Kafka用户中进行操作。

答案 1 :(得分:0)

我在编写Kafka / Kinesis消费者方面有一些经验(不与Cadence合作,但计划尽快这样做)。我的感觉是,您只需要阻止1个使用者线程并等待Kafka流中的新事件。这个消费者可以居住在任何地方,只要它可以与您的Cadence系统对话以向工作流程发送信号。对于每条Kafka消息(在过滤掉不相关的消息之后),如果可以将其设计为包含所有信息以供消费者决定要发信号的工作流程,那将非常简单。如果您无法控制消息中的内容(听起来像您已经拥有一个流),那将是一个小技巧。您的消费者可能需要根据消息中的其他一些标识符来查找要调用的工作流程