哪一个适合完整的工作流程设计 Temporal 或 Cadence
Which one will suit for complete workflow design Temporal or Cadence
我想设计一个完整的端到端工作流编排引擎。
它具有以下要求
- 线性工作流程
- 并行工作流 - 我想并行执行 n 个活动。在验证我想要的所有活动的结果之后
进入下一个状态,否则工作流将失败
- 批处理 - 假设我有 30 个活动要完成,但我希望以批处理方式完成。就像 window 大小是 5 那么我想要
一次执行5个活动T。执行完所有活动后
并验证结果将继续进行或使工作流失败。
- 循环 - 想要 运行 一个 activity 无限直到满足某些条件
- 子工作流
- 轮询
在 Cadence 工作流程中,所有 1-5 都可以轻松支持。我不确定 Polling
是什么意思。如果您可以提供更多详细信息,我会更新此答案以帮助您。
这里是 sample to execute activities in Leaner+parallel/batch+loop:
@Override
public long calculate(long a, long b, long c) {
LOGGER.info("workflow start...");
long result = 0;
// Async.invoke takes method reference and activity parameters and returns Promise.
Promise<Long> ab = Async.function(activities::multiple, a, b);
Promise<Long> ac = Async.function(activities::multiple, a, c);
Promise<Long> bc = Async.function(activities::multiple, b, c);
// Promise#get blocks until result is ready.
this.abPlusAcPlusBc = result = ab.get() + ac.get() + bc.get();
// waiting 30s for a human input to decide the factor N for g(n), based on a*b+a*c+b*c
// the waiting timer is durable, independent of workers' liveness
final boolean received = Workflow.await(Duration.ofMinutes(2), () -> this.factorForGn > 1);
if (!received) {
this.factorForGn = 10;
}
long fi_1 = 0; // f(0)
long fi_2 = 1; // f(1)
this.currentG = 1; // current g = f(0)*f(0) + f(1)*f(1)
long i = 2;
for (; i < this.factorForGn; i++) {
// get next fibonacci number
long fi = fi_1 + fi_2;
fi_2 = fi_1;
fi_1 = fi;
this.currentG += activities.multiple(fi, fi);
}
result += this.currentG;
return result;
}
我想设计一个完整的端到端工作流编排引擎。
它具有以下要求
- 线性工作流程
- 并行工作流 - 我想并行执行 n 个活动。在验证我想要的所有活动的结果之后 进入下一个状态,否则工作流将失败
- 批处理 - 假设我有 30 个活动要完成,但我希望以批处理方式完成。就像 window 大小是 5 那么我想要 一次执行5个活动T。执行完所有活动后 并验证结果将继续进行或使工作流失败。
- 循环 - 想要 运行 一个 activity 无限直到满足某些条件
- 子工作流
- 轮询
在 Cadence 工作流程中,所有 1-5 都可以轻松支持。我不确定 Polling
是什么意思。如果您可以提供更多详细信息,我会更新此答案以帮助您。
这里是 sample to execute activities in Leaner+parallel/batch+loop:
@Override
public long calculate(long a, long b, long c) {
LOGGER.info("workflow start...");
long result = 0;
// Async.invoke takes method reference and activity parameters and returns Promise.
Promise<Long> ab = Async.function(activities::multiple, a, b);
Promise<Long> ac = Async.function(activities::multiple, a, c);
Promise<Long> bc = Async.function(activities::multiple, b, c);
// Promise#get blocks until result is ready.
this.abPlusAcPlusBc = result = ab.get() + ac.get() + bc.get();
// waiting 30s for a human input to decide the factor N for g(n), based on a*b+a*c+b*c
// the waiting timer is durable, independent of workers' liveness
final boolean received = Workflow.await(Duration.ofMinutes(2), () -> this.factorForGn > 1);
if (!received) {
this.factorForGn = 10;
}
long fi_1 = 0; // f(0)
long fi_2 = 1; // f(1)
this.currentG = 1; // current g = f(0)*f(0) + f(1)*f(1)
long i = 2;
for (; i < this.factorForGn; i++) {
// get next fibonacci number
long fi = fi_1 + fi_2;
fi_2 = fi_1;
fi_1 = fi;
this.currentG += activities.multiple(fi, fi);
}
result += this.currentG;
return result;
}