在不阻塞线程的情况下根据信号恢复 Cadence Workflow
Resume Cadence Workflow based on signal without blocking the thread
我们想要构建一个包含以下顺序步骤的工作流
- 执行一些同步活动。
- 通过kafka事件触发外部操作
- 运行结果监听kafka事件
- 根据结果执行一些其他活动。
Kafka 可能包含与工作流无关的事件,因此我们需要一个单独的工作流来过滤该特定工作流的事件。
使用节奏,我打算将其分成两个工作流程
- 工作流程 1:1 -> 2 -> 等待信号 -> 4
- 工作流 2 : 3 -> 调用 workflow1.signal
是否可以等待 workflow1 中的信号而不实际阻塞线程,以便线程可以同时处理另一个工作流。
我认为对 Temporal/Cadence 的工作原理存在一些误解。没有要求不阻止其他工作流能够取得进展的线程。 Worker 实例处理这种情况没有问题。
所以我建议阻塞工作流中的线程以等待信号,因为这是解决您的业务需求的最简单方法。
附带说明一下,我不明白您为什么需要第二个工作流程。无需工作流来过滤 Kafka 事件。您可以直接在发出第一个工作流信号的 Kafka 消费者中执行此操作。
我有一些编写 Kafka/Kinesis 消费者的经验(没有使用 Cadence,但计划很快这样做)。我的感觉是,您只需要阻塞 1 个消费者线程并等待来自 Kafka 流的新事件。这个消费者可以住在任何地方,只要它可以与您的 Cadence 系统对话以向工作流发送信号。对于每条Kafka消息(过滤掉不相关的),如果能设计成包含所有的信息,让消费者决定向哪个工作流发信号,就会很简单。如果您无法控制消息中的内容(听起来您有一个现有的流),这是一个小技巧。您的消费者可能需要根据消息中的其他标识符查找要调用的工作流程
我们想要构建一个包含以下顺序步骤的工作流
- 执行一些同步活动。
- 通过kafka事件触发外部操作
- 运行结果监听kafka事件
- 根据结果执行一些其他活动。
Kafka 可能包含与工作流无关的事件,因此我们需要一个单独的工作流来过滤该特定工作流的事件。
使用节奏,我打算将其分成两个工作流程
- 工作流程 1:1 -> 2 -> 等待信号 -> 4
- 工作流 2 : 3 -> 调用 workflow1.signal
是否可以等待 workflow1 中的信号而不实际阻塞线程,以便线程可以同时处理另一个工作流。
我认为对 Temporal/Cadence 的工作原理存在一些误解。没有要求不阻止其他工作流能够取得进展的线程。 Worker 实例处理这种情况没有问题。
所以我建议阻塞工作流中的线程以等待信号,因为这是解决您的业务需求的最简单方法。
附带说明一下,我不明白您为什么需要第二个工作流程。无需工作流来过滤 Kafka 事件。您可以直接在发出第一个工作流信号的 Kafka 消费者中执行此操作。
我有一些编写 Kafka/Kinesis 消费者的经验(没有使用 Cadence,但计划很快这样做)。我的感觉是,您只需要阻塞 1 个消费者线程并等待来自 Kafka 流的新事件。这个消费者可以住在任何地方,只要它可以与您的 Cadence 系统对话以向工作流发送信号。对于每条Kafka消息(过滤掉不相关的),如果能设计成包含所有的信息,让消费者决定向哪个工作流发信号,就会很简单。如果您无法控制消息中的内容(听起来您有一个现有的流),这是一个小技巧。您的消费者可能需要根据消息中的其他标识符查找要调用的工作流程