temporal.io 与 cadenceworkflow.io 有什么关系?如果根据节奏工作流服务启动一个新项目应该使用什么?
当像文档建议那样使用信号时:
public class MyWorkflow{
public Output myWorkflwMethod(Input input){
...
}
public void mySignalMethod(request){
// do actual processing here.
...
}
}
Run Code Online (Sandbox Code Playgroud)
我可能会遇到以下问题:
我正在尝试使用 Uber Cadence 了解子工作流的用例。与简单地将您的工作流程拆分为多个功能相比,子工作流程的优势是什么?我有一个相当复杂的工作流程,我正在考虑将其拆分为多个子工作流程,但我不确定这样做的利弊。
在 Cadence/Temporal 工作流程编程中:
Async.procedure或创建,Async.function而在Golang中,线程必须通过 创建workflow.Go。所以为什么?Hashtableor来代替线程安全?ConcurrentHashMapHashMap在我们的节奏工作流中,我们通常需要等待一定的时间才能继续外部事件(即电子邮件阅读、链接点击等)。
我想知道将这些事件通知我们的工作流程的最佳方式是什么。信号是正确的方式,还是我们应该创建一个等待事件的活动?
从我所见,我们需要创建一个信号通道ch := workflow.GetSignalChannel(ctx, SignalName),但是上下文在活动中不可用。
ActivityOptions 中有四个不同的超时选项,其中两个是强制的,没有任何默认值:ScheduleToStartTimeout和StartToCloseTimeout。
选择这些超时值时应考虑哪些因素?
我正在使用 golang SDK 进行时间处理。我正在为我的工作流程编写测试LoadCreateWorkflow。它有一个活动并且还启动一个子工作流程LoadLifecycleWorkflow。
在为其编写单元测试时,我模拟了活动和子工作流程LoadLifecycleWorkflow:
s.env.OnActivity(CreateLoadActivity, mock.Anything, mock.Anything).Return(nil, nil).Once()
s.env.OnWorkflow(LoadLifecycleWorkflow, mock.Anything).Return(nil)
s.env.ExecuteWorkflow(LoadCreateWorkflow, wfParams)
Run Code Online (Sandbox Code Playgroud)
(这里 s.env 是单元测试的TestWorkflowEnvironment):
import (
...
"go.temporal.io/sdk/testsuite"
)
type UnitTestSuite struct {
suite.Suite
testsuite.WorkflowTestSuite
env *testsuite.TestWorkflowEnvironment
}
func (s *UnitTestSuite) SetupTest() {
s.env = s.NewTestWorkflowEnvironment()
}
Run Code Online (Sandbox Code Playgroud)
运行我的测试时出现错误:panic: unable to find workflow type: LoadLifecycleWorkflow. Supported types: [LoadCreateWorkflow]
在我的工作流程模块的 init 函数中,我注册了它和子工作流程:
worker.RegisterWorkflow(LoadCreateWorkflow)
worker.RegisterActivity(CreateLoadActivity)
worker.RegisterWorkflow(LoadLifecycleWorkflow)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到“我的未注册”错误LoadLifecycleWorkflow?如何解决?
在关于工作流程重置的设计中我应该考虑什么?
活动任务很容易理解,因为它正在执行一个活动……但什么是决策任务?工作人员是否从一开始(使用已完成活动的记录)贯穿整个工作流程,直到它遇到下一个需要做的“有意义”的事情,同时对接下来需要做的事情做出“决定”?