当前位置: 首页 > 知识库问答 >
问题:

基于信号恢复Cadence工作流,而不阻塞线程

汪和悌
2023-03-14

我们希望建立一个工作流程,其中包含以下步骤,在这个顺序

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

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

使用cadence,我计划将它分成两个工作流程

    < li >工作流程1 : 1 -

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

共有2个答案

席成仁
2023-03-14

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

林蕴藉
2023-03-14

我认为对时间/节奏的工作原理有一些误解。不要求不阻塞线程,以便其他工作流能够取得进展。Worker实例在处理这种情况时不会有问题。

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

附带说明一下,我不明白为什么需要第二个工作流。不需要有工作流来过滤Kafka事件。您可以直接在Kafka消费者中执行此操作,该消费者向第一个工作流发出信号。

 类似资料:
  • 在执行任务时,如果出现故障,希望定义配置以在一定间隔后重试并从失败的任务中恢复。是否可以实现恢复选项?

  • 除了之外,还有其他方法可以发出工作流拒绝信号吗? 基本上,我有一个工作流,它在超时前会定期继续运行。但是,如果它在继续像新的一样工作之前不断收到大量信号,它将会超时并丢失一些信号。我可以将< code > MaximumSignalsPerExecution 设置得更低,这样它就会在超时之前拒绝信号,但理想情况下,我希望能够在工作流级别进行配置。 我正在测试一些更糟糕的情况,其中存在流量峰值,并且

  • 我有4-5个工作线程处理大型消息队列。我还有另一段代码,它使用2-3个worker运行。我想在处理大型消息队列时阻止所有其他工作者。 我正在使用JDK6和Jms 编辑: 队列进程工作者从未终止。当没有消息时,它们阻塞队列。这些工作者由执行器线程池管理,如果我使用读写锁,其中一个工作者也会被阻塞。此外,如果使用循环屏障,那么我必须终止线程,以便重新传递阻塞的第二个进程。由于工作者是由线程池管理的,所

  • 3. 阻塞信号 3.1. 信号在内核中的表示 以上我们讨论了信号产生(Generation)的各种原因,而实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽

  • 阻塞信号是保持该信号并推迟发送,直到阻塞解除,但不会丢失。 结构体sigset_t(信号集合) 其中每一位对应系统支持的一种信号。结构体内部是数组。 函数 函数名 描述 [[sigemptyset sigempty]] 初始化信号集为空集 [[sigfillset sigfillset]] 初始化信号集包含全部信号 [[sigaddset sigaddset]] 向信号集中添加信号 [[sigde

  • 将是什么 线程不足,无法执行工作流。如果此消息始终显示,请选择WorkerOptions。应减小maxConcurrentWorklfowExecutionSize或WorkerOptions。maxWorkflowThreads增加。 处于阻塞状态的工作流在内存中保持活动状态??处于等待状态的工作流是否持续检查条件??更多的 -