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

工作线程和工作流的Cadence配置

齐意致
2023-03-14

将是什么

线程不足,无法执行工作流。如果此消息始终显示,请选择WorkerOptions。应减小maxConcurrentWorklfowExecutionSize或WorkerOptions。maxWorkflowThreads增加。

处于阻塞状态的工作流在内存中保持活动状态??处于等待状态的工作流是否持续检查条件??更多的

public class TestWorkflowImpl implements TestWorkflow {

 private static final Logger logger = LoggerFactory.getLogger(TestWorkflow.class);
 private int counter = 0;

 private final CounterPrintActivity cpa = Workflow.newActivityStub(CounterPrintActivity.class);

 @Override
 @WorkflowMethod
 public String startWorkflow() {
 Workflow.await(() ->counter >= 1000);
 return "Complete";
 }

 @Override
 public int getCurrentStatus() {
 return counter;
 }

 @Override
 public void setCount(int setNum) {
 logger.info("In signal");
 counter = counter+setNum;
 }

-

共有1个答案

沈树
2023-03-14

工人和工作流之间的比例是多少,如何管理线程,以便工人和工作流数量之间不应该中断。如果我在抛出错误后开始更多的工作流,

由于被阻止的工作流根本不消耗工作线程内存(在它们被推出缓存之后),因此不存在这样的比率。因此,如果这些工作流没有任何进展,则可能会拥有数十亿个被阻止的工作流和单个工作人员。

线程不足,无法执行工作流。如果此消息始终显示,请选择WorkerOptions。应减小maxConcurrentWorklfowExecutionSize或WorkerOptions。maxWorkflowThreads增加。

maxWorkflowThreads定义所有当前正在执行和缓存的工作流可以使用的线程数。

< code > maxConcurrentWorklfowExecutionSize 定义可以并行执行多少工作流任务。

“没有足够的线程来执行工作流”异常表明没有足够的线程来执行当前正在运行的工作流任务。例如,如果每个工作流使用两个线程,并且maxConloctWorklfowExecutionSize为100,则maxWorkflow Thread应该至少为200。通过这样的设置,0个工作流将被缓存,因为所有线程都将被当前正在执行的工作流任务消耗。因此,一般来说,最好保持maxConloctWorklfowExecutionSize远高于maxConloctWorklfowExecutionSize以支持缓存。

处于阻塞状态的工作流在内存中保持活动状态??

它将保持缓存状态,直到另一个工作流需要取得进展并将缓存的工作流踢出。之后,当阻塞的工作流接收到一些新事件(如计时器、信号或活动完成)时,它将被加载到工作线程内存中。

处于等待状态的工作流持续检查条件??更多处于等待状态的工作流数量将使工作人员保持工作状态??

它仅在处理某些新事件时进行检查。当什么都没有发生时,不会执行检查。

在下面的示例中,线程正在等待信号,工作流的数量被缩放为一百万/天,timetocloseWorkflow=2天。触发信号的平均时间是相应工作流启动后的1天

假设工作人员可以跟上工作流任务处理速度,则此场景应该可以正常工作。

 类似资料:
  • 在Cadence/Temoral工作流编程中: < li >不允许使用本机线程库。例如,在Java中,线程必须通过< code>Async.procedure或< code>Async.function创建,而在Golang中,线程必须通过< code>workflow创建。去吧。那为什么呢? < li >有没有类似使用本机线程的竞争条件?例如,为了线程安全,应该使用< code>Hashtabl

  • 为用户可视化节奏工作流的最佳方式是什么? 我想在一个高层次的视图中向用户展示工作流的不同步骤(类似于大多数食品配送应用程序的功能:下单- 我对向用户展示实际执行的节奏活动不感兴趣,因为我不希望他们看到我的工作流程的详细信息,我只想可视化他们感兴趣的某种高级阶段。 一种方法是保留工作流的高级描述,并在工作流代码本身内部进行状态转换(在启动活动 X 时将阶段 Y 标记为已启动等)。但是,我试图将这个问

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

  • 我有一个由多台机器组成的网络,我正在使用cadence go客户端。 1号机需要登记活动 机器2需要注册工作流程。 机器3需要启动以启动工作流。 cadence前端服务在另一台机器上。 如何使用 go 客户端执行此操作?此外,收银机是否仅将工作流/活动保存在内存中?我怎样才能把它们推到节奏服务,以便其他机器也能找到它们。

  • 对于长时间运行的活动,我们可以使用心跳来通知活动是正在运行还是已死。 我们有一个工作流,该工作流调用多个子工作流,其中包含一些基于父工作流生成的分组的参数。子工作流是长时间运行的工作流。 有没有办法让类似的检测信号从子工作流发送,因为这些工作流长时间运行,超时设置为几个小时?或者更确切地说,通知子工作流正在运行的方法是什么? 我们正在使用go-client来实现工作流程。

  • 假设我有用不同语言编写的工人(Java