1

我们想要构建一个工作流,其中包含按该顺序执行的以下步骤

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

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

使用 cadence 我打算将它分成两个工作流程

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

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

4

2 回答 2

1

我认为对 Temporal/Cadence 的工作方式存在一些误解。没有要求不阻塞线程以使其他工作流能够取得进展。Worker 实例处理这种情况没有问题。

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

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

于 2020-06-17T15:55:58.200 回答
0

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

于 2020-06-17T17:44:31.273 回答